用于处理[href]中的HTML实体的规范

时间:2013-04-23 08:45:25

标签: html html5 browser specifications

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

详细说明:

我试图解决的bugcheerio项目的一部分。

某些实体最后不需要分号。其中一个是&curren。无论如何,当源链接到/test/example.jsp?item=123&currentSize=S&currentQty=1时,这会导致问题。

浏览器(至少Chrome)handle this很好。我仍然没有想出原因。

2 个答案:

答案 0 :(得分:3)

  

我可能正在寻找太具体的东西。

你是。它们的处理方式与其他地方相同(在定义为包含CDATA的元素之外)。

我找不到任何特定的显式,它们说明了在HTML中评估字符引用的位置,但the attributes部分暗示了它:

  

使用双引号(ASCII十进制34)或单引号(ASCII十进制39)分隔所有属性值。当值由双引号分隔时,单引号可以包含在属性值中,反之亦然。作者也可以使用数字字符引用来表示双引号(&#34;)和单引号(&#39;)。对于双引号,作者也可以使用字符实体引用&quot;

HTML 5 changes the rules

  

必须是以“;”结尾的那个(U + 003B)角色。

......以及相同的变体。

但是,某些浏览器仍支持旧标准,其中当实体后跟非名称字符时,分号是可选的。标准是您必须支付的ISO SGML规范,但HTML 4.0 says

  

注意:在SGML中,可以消除最终的“;”在某些情况下(例如,在换行符处或在标签之前),在数字或命名字符引用之后。在其他情况下,它可能不会被消除(例如,在一个单词的中间)。我们强烈建议使用“;”在所有情况下,以避免需要此字符的用户代理出现问题。

简而言之,为了向后兼容性和清晰度,如果您想在&属性的网址中加入href字符,则只需将其表示为&amp; < / strong>即可。这无处不在。

答案 1 :(得分:3)

关于HTML 4.01以及HTML 4.01,请参阅@ Quentin的回答。

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

在HTML序列化的HTML5中,parsing character references有一些棘手的临时规则。它们暗示在文本内容中,&currentSize=将被解析为好像它是&curr;entSize=,即¤entSize=。但是在属性值中,如在<a href="...">中,则在某些条件下,无法识别引用,因为它不是以分号结束的。

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

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