超链接中的和号导致 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 类型的用户身份验证失败

win7 64位数字签名验证失败问题解决

在 codeigniter 3.1.2 中,登录表单提交导致身份验证失败

激活时提示“激活失败”可以怎么处理?

我们可以将输入的用户名传递给spring security中的身份验证失败url吗?

SQLSERVER 使用Windows 身份验证 模式登录 显示登陆失败