日期:2014-05-16  浏览次数:20431 次

javascript对URL编码的方法总结

当url中有中文时为了不出现乱码需要为URL编码

方法如下:

URL编码: bodyEncode.value = encodeURI(document.all.keyword.value)

URL解码: body.value = decodeURI(bodyEncode.value)

不只是这一种方法:

1 escape
这个是最古老的,实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如“春节”的返回结果是%u6625%u8282,也就是说在Unicode字符集中,“春”是第6625个(十六进制)字符,“节”是第8282个(十六进制)字符。?在地址栏执行:javascript:alert(escape(‘春节’))试试。
它的具体规则是,除了ASCII字母、数字、标点符号“@ * _ + – . /”以外,对其他所有字符进行编码。在\u0000到\u00ff之间的符号被转成%xx的形式,其余符号被转成%uxxxx的形式。
对应的解码函数是unescape()。

2 encodeURI
encodeURI()是Javascript中真正用来对URL编码的函数。
它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号“; / ? : @ & = + $ , #”,也不进行编码。
编码后,它输出符号的utf-8形式,并且在每个字节前加上%。试试:javascript:alert(encodeURI(‘http://www.qq.com?a=春节&b=3+2′));
它对应的解码函数是decodeURI()。

3 encodeURIComponent
最后一个Javascript编码函数是encodeURIComponent()。与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。
因此,“; / ? : @ & = + $ , #”,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。
试试这段代码:javascript:alert(encodeURIComponent(‘http://www.qq.com?a=春节&b=3+2′))?所以使用encodeURIComponent时一般都是对参数来进行编码。
它对应的解码函数是decodeURIComponent()