我是否在<a href…>中编码&符号?

我正在编写自动生成HTML的代码,我希望它能正确地编码。

假设我正在生成以下url的链接:

http://www.google.com/search?rls=en&q=stack+overflow 

我假设所有的属性值应该是HTML编码的。 (请纠正我,如果我错了。)所以这意味着,如果我把上面的URL到一个锚标记,我应该编码&符号&amp; , 喜欢这个:

 <a href="http://www.google.com/search?rls=en&amp;q=stack+overflow"> 

那是对的吗?

是的。 HTML实体在HTML属性内被parsing,而一个stream浪者会产生歧义。 这就是为什么你总是应该写&amp; 而不仅仅是内部的所有 HTML属性。

也就是说,只有&和引号需要被编码。 如果在属性中有特殊字符(如é ,则不需要对这些字符进行编码以满足HTMLparsing器的要求。

过去的情况是,URL需要使用非ASCII字符进行特殊处理,如é 。 您必须使用百分号转义符编码这些数据,在这种情况下,它会给出%C3%A9 ,因为它们是由RFC 1738定义的。 然而,RFC 1738已被RFC 3986 (URI,统一资源标识符)和RFC 3987 (IRI,国际化资源标识符)所取代 ,其中WhatWG基于其工作来定义浏览器在看到非ASCII自HTML5以来的字符 。 因此,在URL中包含非ASCII字符是安全的,百分比编码或不是。

根据目前官方的HTMLbuild议,“&”字符必须被转义,例如“ &amp; 在这样的情况下。 不过,浏览器不需要它,HTML5 CRbuild议这样做,因此特殊的规则适用于属性值。 目前的HTML5validation器在这方面已经过时了(参见带有注释的bug报告 )。

在属性值中可以避免使用&符号,但是除了使用当前工具进行validation之外,没有实际的必要在href值中将它们转义(如果开始转义,存在犯错的风险很小)。

是的,你应该转换为&amp;

W3C的这个htmlvalidation器工具对于这样的问题很有帮助。 它会告诉你一个特定页面的错误和警告。

对,那是正确的。