【发布时间】: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。标记
<INPUT value="I can see clearly that 5<6">字符串的开头和结尾没有歧义,也没有理由转义任何内容。 -
不幸的是,浏览器代码不是这样工作的。当它找到一个打开的标签
<时,它会搜索下一个>。关闭该标签。所以当它遇到另一个“ -
@Vignesh.N 不太正确:jsfiddle.net/dekelb/8zgp2yjt 至少 chrome 可以正确显示。