给出这样的代码:
<script src="http://example.com/?foo=1&bar=2"></script>
src
的价值是否应如下所示进行HTML转义?
我的实验和研究显示出模棱两可的结果。
答案 0 :(得分:3)
是。如果您有疑问,可以使用W3C validator,在这种情况下,&
必须转义为&
。
根据this rules解析双引号属性。找到&
时
切换到character reference in attribute value state,additional allowed character为U + 0022报价标记(“)。
Character reference in attribute value state包含在
中尝试consume a character reference。
如果没有返回任何内容,请将U + 0026 AMPERSAND字符(&amp;)附加到 当前属性的值。
否则,将返回的字符标记附加到当前字符 属性的价值。
最后,切换回切换到的属性值状态 这个州。
因此,如果你没有逃避&
,它(可能)也会起作用。但是,它会在consumption of the character reference:
如果不能匹配,则不会消耗任何字符,也不会消耗任何字符 退回。在这种情况下,如果字符在U + 0026之后 AMPERSAND字符(&amp;)由一个或多个序列组成 字母数字ASCII字符后跟U + 003B SEMICOLON字符 (;),那么这是一个parse error。
请注意,如果您想要安全,请将其转义:
解析算法中的某些点被称为parse errors。 解析错误的错误处理是明确定义的(即 本说明书中描述的处理规则),但是用户 代理在解析HTML文档时可能会中止解析器 他们遇到的第一个解析错误,他们不希望这样做 应用本规范中描述的规则。