【问题标题】:URL encode sees “&” (ampersand) as “&” HTML entityURL 编码将“&”(与号)视为“&”HTML 实体
【发布时间】:2026-01-09 12:50:02
【问题描述】:

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

【问题讨论】:

  • 字符串从何而来?您可以发布到目前为止的代码吗?
  • & 是在 HTML 上下文中转义 & 符号的正确方法...您的来源来自哪里?目的地是什么?例如,在服务器端执行此操作可能会更好。
  • 我从 HTML 正文中获取了一些东西(那是 HTML 编码的(所以,我现在意识到了 &)),我必须在 URL 中传递它......所以,我需要解码 html(但如何?)然后对字符串进行编码(使用 encodeURIComponent)...
  • 找到了...我在 jquery 中使用的是 .html(),而不是 .text()...愚蠢的 (A)
  • jQuery 的 .html() 映射到 innerHTML 属性,所以问题正如我在回答中所说:-)

标签: javascript urlencode


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果你真的这样做了:

    encodeURIComponent('&')
    

    那么结果是%26you can test it here。确保您正在编码的字符串 just & 而不是 & 开头...否则它编码正确,很可能是这种情况。如果您出于某种原因需要不同的结果,可以在编码之前执行.replace(/&/g,'&')

    【讨论】:

    • ...这可能是他的问题。
    【解决方案3】:

    有 HTML 和 URI 编码。 && encoded in HTML%26URI encoding 中是 &

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

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

    结果%26AndOtherHTMLEncodedStuff

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

    【讨论】: