我正在寻找有关在href
标记的<a>
属性中处理HTML实体的规范。到目前为止,没有运气(我可能正在寻找太具体的东西)。
某些实体最后不需要分号。其中一个是¤
。无论如何,当源链接到/test/example.jsp?item=123¤tSize=S¤tQty=1
时,这会导致问题。
浏览器(至少Chrome)handle this很好。我仍然没有想出原因。
答案 0 :(得分:3)
我可能正在寻找太具体的东西。
你是。它们的处理方式与其他地方相同(在定义为包含CDATA的元素之外)。
我找不到任何特定的和显式,它们说明了在HTML中评估字符引用的位置,但the attributes部分暗示了它:
使用双引号(ASCII十进制34)或单引号(ASCII十进制39)分隔所有属性值。当值由双引号分隔时,单引号可以包含在属性值中,反之亦然。作者也可以使用数字字符引用来表示双引号(
"
)和单引号('
)。对于双引号,作者也可以使用字符实体引用"
。
必须是以“;”结尾的那个(U + 003B)角色。
......以及相同的变体。
但是,某些浏览器仍支持旧标准,其中当实体后跟非名称字符时,分号是可选的。标准是您必须支付的ISO SGML规范,但HTML 4.0 says:
注意:在SGML中,可以消除最终的“;”在某些情况下(例如,在换行符处或在标签之前),在数字或命名字符引用之后。在其他情况下,它可能不会被消除(例如,在一个单词的中间)。我们强烈建议使用“;”在所有情况下,以避免需要此字符的用户代理出现问题。
简而言之,为了向后兼容性和清晰度,如果您想在&
属性的网址中加入href
字符,则只需将其表示为&
< / strong>即可。这无处不在。
答案 1 :(得分:3)
关于HTML 4.01以及HTML 4.01,请参阅@ Quentin的回答。
关于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 AMPERSAND字符(&amp;)必须未使用后匹配,并且不返回任何内容。“因此,即使&foobar=
是已定义的名称,也不会在属性值中识别foobar
1} p>
原因是作者在属性值中广泛编写了URL而没有转义&
,并且浏览器已经适应了这一点。