我是否在<a href…>中编码&符号?
我正在编写自动生成HTML的代码,我希望它能正确地编码。
假设我正在生成以下url的链接:
http://www.google.com/search?rls=en&q=stack+overflow
我假设所有的属性值应该是HTML编码的。 (请纠正我,如果我错了。)所以这意味着,如果我把上面的URL到一个锚标记,我应该编码&符号&
, 喜欢这个:
<a href="http://www.google.com/search?rls=en&q=stack+overflow">
那是对的吗?
是的。 HTML实体在HTML属性内被parsing,而一个stream浪者会产生歧义。 这就是为什么你总是应该写&
而不仅仅是内部的所有 HTML属性。
也就是说,只有&
和引号需要被编码。 如果在属性中有特殊字符(如é
,则不需要对这些字符进行编码以满足HTMLparsing器的要求。
过去的情况是,URL需要使用非ASCII字符进行特殊处理,如é
。 您必须使用百分号转义符编码这些数据,在这种情况下,它会给出%C3%A9
,因为它们是由RFC 1738定义的。 然而,RFC 1738已被RFC 3986 (URI,统一资源标识符)和RFC 3987 (IRI,国际化资源标识符)所取代 ,其中WhatWG基于其工作来定义浏览器在看到非ASCII自HTML5以来的字符 。 因此,在URL中包含非ASCII字符是安全的,百分比编码或不是。
根据目前官方的HTMLbuild议,“&”字符必须被转义,例如“ &
在这样的情况下。 不过,浏览器不需要它,HTML5 CRbuild议这样做,因此特殊的规则适用于属性值。 目前的HTML5validation器在这方面已经过时了(参见带有注释的bug报告 )。
在属性值中可以避免使用&符号,但是除了使用当前工具进行validation之外,没有实际的必要在href
值中将它们转义(如果开始转义,存在犯错的风险很小)。
是的,你应该转换为&
。
W3C的这个htmlvalidation器工具对于这样的问题很有帮助。 它会告诉你一个特定页面的错误和警告。
对,那是正确的。