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


293

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


字符串从哪里来?您可以张贴到目前为止的代码吗?
Andy E

1
&在HTML上下文中转义“&”符号的正确方法是什么?您的来源来自哪里?目的地是什么?例如,最好在服务器端执行此操作。
尼克·克拉弗

我从HTML主体中抓取了一些东西(并且那是HTML编码的(所以现在有&我现在意识到)),我必须将其传递到URL中……所以,我需要对html进行解码(但是如何?)然后将其编码为字符串(带有encodeURIComponent)...
dododedodonl,2010年

2
找到了...我用jquery .html()而不是.text()...愚蠢的(A)
dododedodonl 2010年

1
jQuery的.html()映射到innerHTML属性,所以问题就如我在回答中所说的:-)
Andy E 2010年

Answers:


438

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

94

如果您确实这样做:

encodeURIComponent('&')

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


3
...这可能是他的问题。
Pekka

2

有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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.