我正在编码一个将在URL中传递的字符串(通过GET)。但是,如果我使用escape
,encodeURI
或encodeURIComponent
,&
将替换为%26amp%3B
,但我希望将其替换为%26
。我做错了什么?
答案 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('&')
然后结果为%26
,you 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}}
希望这能节省你一些时间