URL编码将“&”(&符号)看作“&”HTML实体

我正在编码一个string,将通过一个URL传递(通过GET)。 但是,如果我使用escapeencodeURIencodeURIComponent&会被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

希望这可以为你节省一些时间