Javascript中的URL解码

时间:2008-11-15 09:53:52

标签: java javascript

我想解码使用java.net.URLEncoder.encode()方法编码的字符串。

我尝试在javascript中使用unescape()函数,但空格会出现问题,因为java.net.URLEncoder.encode()会转换空格 到'+'但unescape()不会将'+'转换为空格。

4 个答案:

答案 0 :(得分:2)

尝试decodeURI("")decodeURIComponent("")! - )

答案 1 :(得分:2)

使用JavaScript的escape / unescape函数几乎总是错误的,它与URL编码或Web上的任何其他标准编码不兼容。非ASCII字符被意外地处理以及空格,并且旧浏览器不一定具有相同的行为。

正如roenving所提到的,你想要的方法是decodeURIComponent()。这是一个你在IE 5.0上找不到的新版本,所以如果你需要支持那个浏览器(现在不希望这样!)你需要自己实现这个功能。对于非ASCII字符,这意味着您需要实现UTF-8编码器。如果您需要,可以使用代码。

答案 2 :(得分:1)

decodeURI [Component]也不处理+作为空格(至少在我测试的FF3上)。

简单的解决方法:

alert(decodeURIComponent('http://foo.com/bar+gah.php?r=%22a+b%22&d=o%e2%8c%98o'.replace(/\+/g, '%20'))) 

事实上,unescape在这个网址上窒息:它只知道像u2718这样的UTF-16字符,这些字符不是标准的(参见Percent-encoding)。

答案 3 :(得分:0)

尝试

var decoded = decodeURIComponent(encoded.replace(/\+/g," "));