在 a[href] 中处理 HTML 实体的规范

fb5*_*b55 2 html browser specifications

我正在寻找有关处理标签href属性中HTML 实体的规范<a>。到目前为止,没有运气(我可能正在寻找太具体的东西)。

详细:

我正在尝试修复的错误cheerio项目的一部分。

某些实体不需要末尾有分号。其中之一是&curren。无论如何,当源链接到/test/example.jsp?item=123&currentSize=S&currentQty=1.

浏览器(至少是 Chrome)可以很好地处理这个问题。我仍然没有弄清楚为什么。

Juk*_*ela 5

关于 HTML 直到并包括 HTML 4.01,请参阅@Quentin 的回答。

对于任何形式的 XHTML,包括 XHTML 序列化中的 HTML5,都&currentSize=包含格式良好的错误,因此文档的任何显示都会中止(当文档被作为真正的 XHTML 处理时)。

在 HTML5 的 HTML 序列化中,解析字符引用有一些棘手的特殊规则。它们暗示在文本内容中,&currentSize=将被解析为好像它是写的&curr;entSize=,即作为¤entSize=。但是在属性值中,如在 中<a href="...">,则在某些条件下,引用不被识别,因为它没有以分号终止。

具体来说,那里描述的条件是:“如果字符引用作为属性的一部分被使用,并且匹配的最后一个字符不是“;” (U+003B) 字符,并且下一个字符是“=”(U+003D) 字符或在 ASCII 数字、大写 ASCII 字母或小写 ASCII 字母范围内,然后,由于历史原因,所有在 U+0026 AMPERSAND 字符 (&) 之后匹配的必须未被消耗,并且不返回任何内容。” 所以 no&foobar=将在属性值中被识别,即使foobar是定义的名称

原因是作者在属性值中广泛写入 URL 而没有转义&,浏览器已经适应了这一点。

  • @fb55,条件在我参考的部分的 HTML5 RC 中有描述,但您需要向前扫描才能看到描述。我会把它添加到我的答案中。 (2认同)