【问题标题】:How to replace href url without having all & replaced by a &如何在不将所有 & 替换为 & 的情况下替换 href url
【发布时间】:2013-01-29 17:48:01
【问题描述】:

我正在尝试用页面加载时计算的 URL 替换一些空的 href="" 语句。

然而,替换字符串包含多个 &amp,需要在 href 中。

无论我尝试什么,只要使用 setAttribute("href", url);$(id).attr('href', url),所有 &amp 都会被 & 替换,并且链接会失败。

如何防止这种情况发生?我很确定任何以.href 结尾或包含href 的代码都在经历翻译阶段并且都会失败。

您可能已经注意到我已经多次编辑此消息,因为您根本无法输入完整的 '& a m p;'在此框中,也不会在此处翻译为“&”。

【问题讨论】:

  • 如何获得url 变量?
  • 没关系,它永远是一个字符串,只要有一个 &在其中,它将被翻译。如果直接将相同的字符串粘贴到 href="" 中,则没有问题。
  • 如果您使用 scripting&amp 写入属性,那么它将在属性值 verbatim 中。 是链接失败的原因。另请参阅 Gareth 的出色回答。
  • 我有一个正确的现成字符串 URL。为了在 href="" 的引号之间获取该字符串,我尝试了 link.setAttribute("href", url); 等。结果是没有文字 &amps 的 href,它调用的 Perl 脚本失败。

标签: javascript jquery html href replace


【解决方案1】:

让我们退后一步,从头开始考虑这个问题。转义序列&xxx; 是将“特殊字符”嵌入 HTML 文档的方式。需要明确的是,它是一个 HTML 转义序列。

这种转义字符的方式很有用,因为它意味着可以将字符放入原本无法嵌入的 ASCII 文件中。

例如,可以使用表示其 Unicode 代码点 € 的数字代码嵌入欧元符号 ()。或者,可以使用其字符实体名称  嵌入不间断空格。 (顺便说一句:这些字符更容易嵌入到 UTF-8 文件中,不需要转义,但这不是重点)

现在,因为这个转义序列总是以 & 符号开头,这意味着 HTML 文档中的裸 & 符号是不明确的 - 当浏览器读取文档时,它不知道您是否需要实际的 & 符号或者是否有即将出现 HTML 实体转义序列。为了消除这种歧义,如果你想在 HTML 文档中嵌入一个 & 符号,那么你需要对它进行转义。

让我强调一下这句话:为了消除这种歧义,如果你想在 HTML 文档中嵌入一个 & 符号,那么你需要转义它。

因为这种转义只适用于 HTML 文档,如果您在 .js 文件中编写 Javascript,那么这种转义序列与您无关。你可以把你的&符号放在未转义的地方,没有问题。这意味着,您的 Javascript 文件可以用裸 & 符号替换 URL,不需要 &

就浏览器而言,您编写的所有这些 URL 仅包含裸 & 符号。转义序列& 只需要以 HTML 形式表达,一旦浏览器读取了 HTML,那么转义序列就会被遗忘。

我在这里重复了几次,但那是因为我试图让它尽可能清楚。

【讨论】:

  • 但它是需要传递 &amps 的 HTLM href!但我需要动态 url,所以不能嵌入固定的 href。
  • @Avan 冷静下来想想。您不是在此处编写 HTML 代码。在最简单的情况下,您正在设置对象的字符串属性。
  • 看来替代品确实不是这里的罪魁祸首。我同时遇到了另一个问题,看起来是字符串导致了问题。我将 url-builder 中的 & 替换为常规 & 符号,现在它可以正常工作了。
【解决方案2】:

在设置a 标记的href 属性之前,您必须在url 中将& 替换为&

var url = 'www.example.com?a=1&b=2'
url = url.replace(/\&/g, '&')
$('a').attr('href', url)

【讨论】:

  • 不,字符串已经有 &在其中,只要调用任何 href 函数,它们就会丢失。只需调用 $('a').attr('href', url) 从 href="..." 的结果中删除 &amps。
  • 正好相反,因为脚本不是 HTML
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
相关资源
最近更新 更多