zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【JS】url传参中文乱码的解决方法

JS中文方法 解决 乱码 url 传参
2023-09-11 14:14:50 时间

1、escape 和 unescape

escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。

采用unicode字符集对指定的字符串除0-255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z。

escape()函数用于js对字符串进行编码,不常用。

//跳转页
location.href = './test.html?'+escape('name=张三&age=18')
 
//接收页
var str = unescape(location.search.substr(1));
 
//url显示
'test.html?name%3D%u5F20%u4E09%26age%3D18'

注意:使用此方法时,不能对整个url进行编码,仅可对传参进行编码,因为会对 “?”等进行编码,导致路径错误,所以一般不用该方法。

2、encodeURI 和 decodeURI

把URI字符串采用UTF-8编码格式转化成escape各式的字符串。
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURI()用于整个url编码

//跳转页
location.href = encodeURI('./test.html?name=张三&age=18');
 
//接收页
var str = decodeURI(location.search.substr(1));
 
//url显示
'test.html?name=张三&age=18'

3、encodeURIComponent 和 decodeURIComponent

与encodeURI()的不同的是,“; / ? : @ & = + $ , #”,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。把URI字符串采用UTF-8编码格式转化成escape格式的字符串。

//跳转页
location.href = './test.html?'+encodeURIComponent('name=张三&age=18');
 
//接收页
var str = decodeURIComponent(location.search.substr(1));
 
//url显示
'test.html?name%3D张三%26age%3D18'

注意:使用此方法时,不能对整个url进行编码,仅可对传参进行编码,因为会对 “?”等进行编码,导致路径错误,所以一般不用该方法。