为什么<a> tag replaces spaces with %2520? how to solve the issue?</a>

时间:2014-12-02 03:24:10

标签: javascript html url

在这种情况下,我想解释问题,因为场景是解释它的最好方法。

我在名为A.html的页面中有一个搜索框,传递给此页面的参数应替换为其搜索框的值。问题是,当我传递参数时,空格被%2520替换,因此错误的值将被添加到搜索框中。我需要解决它。

  1. <a href="www.example.com/a.html?value=Here and there">Link</a>

  2. 以下地址将被放入地址栏:www.example.com/a.html?value=Here%2520and%2520there

  3. 此值将替换为搜索框的值:Here%2520and%2520there。我需要在搜索框中输入此值"Here and There"。 (没有%2520

2 个答案:

答案 0 :(得分:5)

这里似乎发生的是URL被双重编码(见下文);虽然我无法解释为什么会发生这种情况,但可能是因为您的网址未正确进行网址编码:

<a href="www.example.com/a.html?value=Here and there">Link</a>

应该是:

<a href="www.example.com/a.html?value=Here+and+there">Link</a>

或者:

<a href="www.example.com/a.html?value=Here%20and%20there">Link</a>

双重编码是这样的:

" "      regular space
"%20"    percent encoded, " " -> "%20"
"%2520"  percent encoded, "%" -> "%25"

更新

我无法解释双重编码的原因是因为问题遗漏了传递的值是如何添加到搜索框的。最可能的情况是搜索框中填充了百分比编码值。要解决这个问题,你必须首先解码这个值,即

searchBox.value = decodeURIComponent('Here%20and%20there');

另请参阅:decodeURIComponent()

答案 1 :(得分:0)

如前所述,将此数据作为URL提供需要空格和其他非ascii字符进行URL编码。如果没有这个,浏览器将无法正确解析URI。

您可以进行更改以索取原始数据而不对其进行编码(保持空格不变),但如果您要附加到URL,则无效。如果不是,请随意粘贴与您尝试处理数据有关的代码。