如何在没有所有&的情况下替换href url取而代之的是&

时间:2013-02-14 00:59:52

标签: javascript jquery html href replace

我正在尝试用pageload上的计算URL替换一些空的href=""语句。

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

我尝试过,只要使用setAttribute("href", url);$(id).attr('href', url),所有& amp都会被&取代,并且链接会失败。

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

您可能已经注意到我已经多次编辑此邮件,因为您根本无法输入完整的'& a m p;'在这个框中没有被翻译成'&'这里也是。

2 个答案:

答案 0 :(得分:2)

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

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

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

现在,因为这个转义序列总是以&符号开头,这意味着HTML文档中的一个简单的&符号是不明确的 - 因为浏览器通过文档读取它不知道你是否想要一个实际的&符号或是否有一个&符号HTML实体转义序列即将到来。要消除这种歧义,如果要在HTML文档中嵌入&符号,则需要将其转义。

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

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

就浏览器而言,您编写的所有URL都只包含裸露的&符号。只有当浏览器读取HTML然后忘记转义序列时,转义序列&才需要表达HTML格式的

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

答案 1 :(得分:0)

在设置&代码的&属性之前,您必须在网址中将href替换为a

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