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

dod*_*onl 292 javascript urlencode

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

And*_*y E 436

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

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

if ("textContent" in el)
    str = encodeURIComponent(el.textContent);
else
    str = encodeURIComponent(el.innerText);
Run Code Online (Sandbox Code Playgroud)

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

encodeURIComponent(str.replace(/&/g, "&"));
Run Code Online (Sandbox Code Playgroud)


Nic*_*ver 94

如果你真的这样做:

encodeURIComponent('&')
Run Code Online (Sandbox Code Playgroud)

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

  • ......这可能是他的问题. (3认同)

Mat*_*ius 8

有 HTML 和 URI 编码。&& HTML 编码,而%26URI&编码。

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

var div = document.createElement('div');
div.innerHTML = '&AndOtherHTMLEncodedStuff';
    
var htmlDecoded = div.firstChild.nodeValue;
console.log('htmlDecoded: '+htmlDecoded);
    
var urlEncoded = encodeURIComponent(htmlDecoded);
console.log('urlEncoded: '+urlEncoded);
Run Code Online (Sandbox Code Playgroud)

结果%26AndOtherHTMLEncodedStuff

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