Javascript编码函数:escape()
、encodeURI()
以及encodeURIComponent()
。
只有字母和数字
[0-9a-zA-Z]
、一些特殊符号$-_.+!*'(),
、以及某些保留字,才可以不经过编码直接用于URL。
encodeURI()
对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号;/?:@&=+$,#'
不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%
。对应的解码函数是decodeURI()
。
1 | encodeURI("http://www.baidu.com?wd=what's wrong?") |
encodeURIComponent()
与encodeURI()
的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。因此,;/?:@&=+$,#
,这些在encodeURI()
中不被编码的符号,在encodeURIComponent()
中统统会被编码(不对单引号'
编码)。至于具体的编码方法,两者是一样。对应的解码函数是decodeURIComponent()
。
1 | encodeURIComponent("http://www.baidu.com?wd=what's wrong?") |
在添加或提取url参数时注意对参数值进行encodeURIComponent
和decodeURIComponent
,避免参数值中包含特殊字符影响url解析。
escape()
escape()
不能直接用于URL编码,现在已经不提倡使用。它的真正作用是返回一个字符的Unicode编码值。比如“春节”的返回结果是%u6625%u8282
,也就是说在Unicode字符集中,“春”是第6625个(十六进制)字符,“节”是第8282个(十六进制)字符。
1 | escape("春节") // "%u6625%u8282" |
参考文章
阮一峰的网络日志关于URL编码