我想解码使用java.net.URLEncoder.encode()
方法编码的字符串。
我尝试在javascript中使用unescape()
函数,但空格会出现问题,因为java.net.URLEncoder.encode()
会转换空格
到'+'但unescape()
不会将'+'转换为空格。
答案 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," "));