网址及查询字符串中包含中文时,一般会进行url编码,常用的有三种编码方式esacpe、encodeURI、encodeURIComponent三种方式;
无论网页的原始编码是什么,一旦被Javascript编码,就都变为unicode字符.
1.escape()
escape()实际上并不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。
例如:
escape("小明");
"%u5C0F%u660E"
escape()对应的解码函数是unescape();
escape()不对“+”编码。但是网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。所以,使用的时候要小心。
2.encodeURI()
encodeURI()会对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号“; / ? : @ & = + $ , #”,也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。
encodeURI("小明");
"%E5%B0%8F%E6%98%8E"
encodeURI("http://www.example.com?name=小明");
"http://www.example.com?name=%E5%B0%8F%E6%98%8E"
encodeURI()对应的解码函数是decodeURI()
encodeURI()不对单引号'编码。
3.encodeURIComponent()
encodeURIComponent()与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。
因此,“; / ? : @ & = + $ , #”,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。
encodeURIComponent("小明");
"%E5%B0%8F%E6%98%8E"
encodeURIComponent("http://www.example.com?name=小明");
"http%3A%2F%2Fwww.example.com%3Fname%3D%E5%B0%8F%E6%98%8E"
encodeURIComponent()对应的解码函数是decodeURIComponent()。
encodeURIComponent()相比encodeURI()要更加彻底。
总结:
escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如"小明"的返回结果是"%u5C0F%u660E",escape()不对"+"编码 主要用于汉字编码,现在已经不提倡使用。
encodeURI()是Javascript中真正用来对URL编码的函数。 编码整个url地址,但对特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。对应的解码函数是:decodeURI()。
encodeURIComponent() 能编码"; / ? : @ & = + $ , #"这些特殊字符。对应的解码函数是decodeURIComponent()。
假如要传递带&符号的网址,用用encodeURIComponent()比较合适