JavaScript中的URL解码

5

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

我尝试使用javascript中的 unescape() 函数,但对于空格会出现问题,因为 java.net.URLEncoder.encode() 把空格转换成了 '+',但是 unescape() 不会把 '+' 转换成空格。

4个回答

1
尝试使用decodeURI("")decodeURIComponent("")!-)

仅仅因为它需要一个字符串作为参数!-) - roenving

1

使用JavaScript的escape/unescape函数几乎总是错误的选择,它与URL编码或Web上的任何其他标准编码不兼容。非ASCII字符以及空格的处理方式也会出现意外情况,并且旧版浏览器的行为可能不同。

正如roenving所提到的,你需要使用decodeURIComponent()方法。这是一个较新的添加项,在IE 5.0上找不到,因此如果你需要支持该浏览器(现在希望不需要!),你需要自己实现该函数。对于非ASCII字符,这意味着你需要实现一个UTF-8编码器。如果需要,可以提供代码。


1

尝试一下

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

这确实将“+”转换为空格。完美地工作了。谢谢 :) - UglyBlueCat

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 在处理这个 URL 时会出现问题:它只能识别像 %u2318 这样的 UTF-16 字符,而这些字符并不是标准的(请参见 百分号编码)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接