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

IT技术 javascript urlencode
2021-01-31 06:29:57

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

3个回答

没有看到你的代码,除了在黑暗中刺伤之外,很难回答。我猜你传递给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, "&"));

如果你真的这样做:

encodeURIComponent('&')

那么结果就是%26你可以在这里测试一下确保您正在编码的字符串只是 &而不是&开始...否则它编码正确,这很可能是这种情况。如果由于某种原因需要不同的结果,则可以.replace(/&/g,'&')在编码之前执行 a

……那应该是他的问题。
2021-04-11 06:29:57

有 HTML 和 URI 编码。&& 在HTML编码%26&URI编码

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

var div = document.createElement('div');
div.innerHTML = '&AndOtherHTMLEncodedStuff';
var htmlDecoded = div.firstChild.nodeValue;
var urlEncoded = encodeURIComponent(htmlDecoded);

结果 %26AndOtherHTMLEncodedStuff

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