URL编码将“&”(&符号)视为“&”HTML实体

时间:2010-08-22 13:53:36

标签: javascript urlencode

我正在编码一个将在URL中传递的字符串(通过GET)。但是,如果我使用escapeencodeURIencodeURIComponent&将替换为%26amp%3B,但我希望将其替换为%26 。我做错了什么?

3 个答案:

答案 0 :(得分:430)

没有看到你的代码,除了在黑暗中刺伤外,很难回答。我猜你正在传递给 encodeURIComponent()的字符串,这是正确使用的方法,来自访问 innerHTML 属性的结果。解决方案是获取 innerText / textContent 属性值:

var str, 
    el = document.getElementById("myUrl");

if ("textContent" in el)
    str = encodeURIComponent(el.textContent);
else
    str = encodeURIComponent(el.innerText);

如果不是这种情况,您可以使用 replace()方法替换HTML实体:

encodeURIComponent(str.replace(/&/g, "&"));

答案 1 :(得分:93)

如果你真的这样做了:

encodeURIComponent('&')

然后结果为%26you can test it here。确保您编码的字符串 &而不是&开头...否则它的编码正确,很可能就是这种情况。如果由于某种原因需要不同的结果,可以在编码之前执行.replace(/&/g,'&')

答案 2 :(得分:2)

有HTML和URI编码。 & & encoded in HTML %26 &位于URI encoding var div = document.createElement('div'); div.innerHTML = '&AndOtherHTMLEncodedStuff'; var htmlDecoded = div.firstChild.nodeValue; var urlEncoded = encodeURIComponent(htmlDecoded);

因此,在对字符串进行URI编码之前,您可能需要进行HTML解码,然后对其进行URI编码:)

%26AndOtherHTMLEncodedStuff

结果{{1}}

希望这能节省你一些时间