&符号是否应该在
HTML属性中编码的唯一字符?
众所周知,这不会通过验证:
<a href="http://domain.com/search?q=whatever&lang=en"></a>
因为&符号应该是& amp; amp; amp; amp; amp;这是验证失败的direct link.
应该编码的This guy lists a bunch of characters,但他错了.如果您对http://中的第一个“/”进行编码,则href将无效.
在ASP.NET中,是否已经构建了一个帮助方法来处理这个问题?像Server.UrlEncode和HtmlEncode这样的东西显然不起作用 – 这些用于不同的目的.
我可以构建我自己的简单扩展方法(如.ToAttributeView()),它可以进行简单的字符串替换.
解决方法
除了值的标准URI编码之外,&是唯一与HTML实体相关的字符,您必须担心它只是因为这是开始每个HTML实体的字符.以下面的URL为例:
http://query.com/?q=foo<=bar>=baz
即使没有尾随的分号,因为& lt;是<的实体和& gt;是>的实体,某些旧版浏览器会将此网址翻译为:
http://query.com/?q=foo<=bar>=baz
所以你需要指定&作为& amp;防止HTML解析文档中的链接发生这种情况.