超链接中的和号导致 W3C 验证失败
Posted
技术标签:
【中文标题】超链接中的和号导致 W3C 验证失败【英文标题】:Ampersands in hyperlinks cause W3C validation to fail 【发布时间】:2011-01-29 16:00:40 【问题描述】:我有一个反复出现的问题。我编写了符合标准的良好代码,但由于某些超链接 url 中的 & 符号而失败。
有没有人知道解决这个问题的方法或破解方法。
谢谢
【问题讨论】:
【参考方案1】:我编写了符合标准的良好代码,但由于某些超链接 url 中的 & 符号而失败。
URL 中未转义的 & 符号(或其他任何地方,如果它们不是 html 实体的一部分!)不是“符合标准的良好代码”。
把它们变成&
,你就可以准确地声称自己做到了。
【讨论】:
语法纳粹:/replace are not with ist +1 另外很高兴知道:未屏蔽的&
将被视为无效即使在 javascript 块中,除非它们包含在 CDATA
标记中。
感谢大家的回复。 URL 编码对我来说是一个新的,我正在研究它。上面 Ronald 提供的 W3C URL 编码页面有一个很好的链接。【参考方案2】:
您是否在这样的链接中制作了它们?
&
【讨论】:
【参考方案3】:您应该URL Encode 超链接,以便所有字符都转换为有效的 ASCII 格式并且不包含任何 (X)HTML 实体。
对于 C# 使用 HttpUtility.UrlEncode
,对于 php urlencode
,对于 JavaScript encodeURI
等...为您正在使用的语言找到正确的方法应该不会那么难。
【讨论】:
htmlspecialchars
(php.net/manual/en/function.htmlspecialchars.php) 实际上比 urlencode
要好。
...我想称之为必要。 urlencode()
是错误的方法。 & 符号在 URL 中具有特殊含义(GET 参数分隔符),urlencode()
将通过转义它们删除该含义。我们不想在 URL 上下文中对 & 符号进行编码。我们想在 HTML 上下文中对 & 符号进行编码。 htmlspecialchars()
这样做。【参考方案4】:
CDATA 可以在 JavaScript 字符串中有 & 的地方创造奇迹。
【讨论】:
以上是关于超链接中的和号导致 W3C 验证失败的主要内容,如果未能解决你的问题,请参考以下文章
PayPal PayFlow 链接测试交易中的 MasterCard 类型的用户身份验证失败
在 codeigniter 3.1.2 中,登录表单提交导致身份验证失败