【发布时间】:2011-01-29 16:00:40
【问题描述】:
我有一个反复出现的问题。我编写了符合标准的良好代码,但由于某些超链接 url 中的 & 符号而失败。
有没有人知道解决这个问题的方法或破解方法。
谢谢
【问题讨论】:
标签: html validation web-standards w3c-validation
我有一个反复出现的问题。我编写了符合标准的良好代码,但由于某些超链接 url 中的 & 符号而失败。
有没有人知道解决这个问题的方法或破解方法。
谢谢
【问题讨论】:
标签: html validation web-standards w3c-validation
我编写了符合标准的良好代码,但由于某些超链接 url 中的 & 符号而失败。
URL 中未转义的 & 符号(或其他任何地方,如果它们不是 HTML 实体的一部分!)不是“符合标准的良好代码”。
把它们变成&,你就可以准确地声称自己做到了。
【讨论】:
& 将被视为无效即使在 JavaScript 块中,除非它们包含在 CDATA 标记中。
您是否在这样的链接中制作了它们?
&
【讨论】:
您应该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() 这样做。
CDATA 可以在 JavaScript 字符串中有 & 的地方创造奇迹。
【讨论】: