我正在寻找href
标记的<a>
属性中处理HTML实体的规范。到目前为止,运气不佳(我可能在寻找一些过于具体的东西)。
详细说明:
我试图修复的bug是cheerio项目的一部分。
有些实体的结尾不需要分号。其中之一是¤
。无论如何,当源链接到/test/example.jsp?item=123¤tSize=S¤tQty=1
时,这会导致问题。
浏览器(至少是Chrome浏览器)handle this不错。但我还是不明白为什么。
最佳答案
关于HTML 4.01及以下版本,请参见@Quentin's answer。
对于任何类型的XHTML,包括XHTML序列化中的HTML5,¤tSize=
都包含格式良好的错误,因此文档的任何显示都将中止(当文档作为真正的XHTML处理时)。
在HTML序列化的HTML5中,对于parsing character references有一些棘手的特殊规则。它们意味着在文本内容中,¤tSize=
将被解析为好像它是写在&curr;entSize=
中的,即¤entSize=
一样。但在属性值中,如<a href="...">
,则在某些条件下,引用无法识别,因为它没有以分号结尾。
具体来说,这里描述的条件是:“如果字符引用被用作属性的一部分,并且匹配的最后一个字符不是“;”(U+003B)字符,并且下一个字符是“=”(U+003D)字符,或者范围是ASCII数字、大写ASCII字母或小写ASCII字母,则对于历史原因是,在U+0026与号字符(&)之后匹配的所有字符都必须取消使用,并且不返回任何内容。“因此,即使&foobar=
是已定义的名称,属性值中也不会识别foobar
”
原因是作者广泛地使用属性值编写url,而没有转义&
,浏览器已经适应了这一点。
关于html - 在[href]中处理HTML实体的规范,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16164835/