URL编码将“&”(&符号)看作“&”HTML实体
我正在编码一个string,将通过一个URL传递(通过GET)。 但是,如果我使用escape
, encodeURI
或encodeURIComponent
, &
会被replace为%26amp%3B
,但我希望它被replace为%26
。 我究竟做错了什么?
没有看到你的代码,在黑暗中很难回答。 我猜你传递给encodeURIComponent()的string是正确的使用方法,它来自访问innerHTML属性的结果。 解决方法是获取innerText / textContent属性值:
var str, el = document.getElementById("myUrl"); if ("textContent" in el) str = encodeURIComponent(el.textContent); else str = encodeURIComponent(el.innerText);
如果不是这种情况,可以使用replace()方法来replaceHTML实体:
encodeURIComponent(str.replace(/&/g, "&"));
如果你真的这样做了:
encodeURIComponent('&')
那么结果是%26
, 你可以在这里testing它 。 确保你正在编码的string是&
而不是&
开始…否则它编码正确,这可能是这种情况。 如果由于某种原因需要不同的结果,则可以在编码之前执行.replace(/&/g,'&')
。
有HTML和URI编码。 &
是用HTML编码的,而%26
是用URI编码的 。
所以在URI编码你的string之前,你可能想HTML解码,然后URI编码:)
var div = document.createElement('div'); div.innerHTML = '&AndOtherHTMLEncodedStuff'; var htmlDecoded = div.firstChild.nodeValue; var urlEncoded = encodeURIComponent(htmlDecoded);
结果%26AndOtherHTMLEncodedStuff
希望这可以为你节省一些时间