【问题标题】:Why do I need to escape < and & when rendering an attribute?为什么在渲染属性时需要转义 < 和 &?
【发布时间】:2017-01-03 23:35:57
【问题描述】:

我正在阅读HtmlAttributeEncode 的文档,据我了解,它旨在用于呈现作为属性出现在双引号内的 HTML 时,例如

<INPUT Value="This value must be escaped so that it doesn't contain any quotes">

据我所知,我唯一需要转义的字符就是双引号。浏览器应该能够找出该字符串中的其他所有内容都属于该属性。

那么,为什么文档会这样说呢?

HtmlAttributeEncode 方法仅将引号 (")、与号 (&) 和左尖括号 (

事实上它确实逃脱了那些,正如this poor guy所见。

在这种情况下是否有任何理由转义

用我的肉眼,我可以很容易地看到在这个字符序列中分隔的开始和结束位置:

<INPUT value="You & I can both easily see that 5 < 6!">

只要双引号序列正确关闭(并且双引号被转义),我不明白为什么其他字符必须进行 HTML 编码。

【问题讨论】:

  • 原因:  < >这些是用于空格、 的 HTML 编码字符串,浏览器可能会将 视为标签。因此您不应使用它们,否则您必须转义它们
  • 明白。但是,属性只包含纯文本字符串,而不包含 HTML。标记&lt;INPUT value="I can see clearly that 5&lt;6"&gt; 字符串的开头和结尾没有歧义,也没有理由转义任何内容。
  • 不幸的是,浏览器代码不是这样工作的。当它找到一个打开的标签&lt;时,它会搜索下一个&gt;。关闭该标签。所以当它遇到另一个“
  • @Vignesh.N 不太正确:jsfiddle.net/dekelb/8zgp2yjt 至少 chrome 可以正确显示。

标签: c# html asp.net .net


【解决方案1】:

根据规格:

3.2.3.1 Attributes

除非另有说明,HTML 元素的属性可以有任何字符串值,包括空字符串。除非明确说明,对这些属性中可以指定的文本没有任何限制。

根据specs of html4value属性的内容应该是cdata的类型。

来自HTML Document Representation

5.3.2 字符实体引用

四个字符实体引用值得特别提及,因为它们经常用于转义特殊字符:

&amp;lt;”代表 “&amp;gt;”代表 > 符号。
&amp;amp;”代表&符号。
&amp;quot;”代表“标记”。

希望在文本中添加“&lt;”(ASCII 十进制 60)以避免可能与标记开头(开始标记打开分隔符)混淆。同样,作者应该在文本中使用“&amp;gt;”(ASCII 十进制 62)而不是“>”,以避免旧用户代理在出现在引用属性中时错误地将其视为标签结尾(标签关闭分隔符)的问题价值观。

作者应使用“&”(ASCII 十进制 38)而不是“&”以避免与字符引用的开头混淆(实体引用打开分隔符)。 作者还应该在属性值中使用“&”,因为在 CDATA 属性值中允许字符引用。

【讨论】:

  • 另外XML定义非常相似。
  • @MarkFitzpatrick,没错。 xhtml(以及 html5)是基于 xml 的 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 2011-12-29
  • 2020-08-27
  • 1970-01-01
  • 2019-08-07
  • 2020-11-04
  • 1970-01-01
相关资源
最近更新 更多