我正在尝试用pageload上的计算URL替换一些空的href=""
语句。
然而,替换字符串包含几个& amp,它们需要在href中。
我尝试过,只要使用setAttribute("href", url);
或$(id).attr('href', url)
,所有& amp都会被&
取代,并且链接会失败。
如何防止这种情况发生?我很确定任何以.href
或包含href
结尾的代码都会经历翻译阶段并且都会失败。
您可能已经注意到我已经多次编辑此邮件,因为您根本无法输入完整的'& a m p;'在这个框中没有被翻译成'&'这里也是。
答案 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)