关于ahref传参的中⽂乱码问题
当需要href进⾏传参,参数为中⽂时,会出现乱码问题,最简单的⽅法是:
传⼊的值⾸先⽤escape()进⾏加密,然后在取值页⾯⽤unescape()解密,亲测有效。
⽹上查了⼀下还有⽤urlencode进⾏加密,urldecode解密。
js对⽂字进⾏编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:
unescape,decodeURI,decodeURIComponent
1、传递参数时需要使⽤encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
例如:<script language="javascript">document.write('<a href="passport.baidu/?logout&aid=7&u=
+encodeURIComponent("cang.baidu/bruce42")+">退出< /a>');</script>
>2、进⾏url跳转时可以整体使⽤encodeURI
例如:Location.href=encodeURI("cang.baidu/do/s?word=百度&ct=21");
3、 js使⽤数据时可以使⽤escape
例如:搜藏中history纪录。
4、 escape对0-255以外的unicode值进⾏编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent 编码结果相同。
5、最多使⽤的应为encodeURIComponent,它是将中⽂、韩⽂等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使⽤encodeURIComponent时需要后台解码对utf-8⽀持(form中的编码⽅式和当前页⾯编码⽅式相同)
6、不编码:
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
【escape() encodeURI() 区别?】
escape() ⽅法:
所有空格、标点符号、重⾳字符,以及任何其他⾮ASCII字符都编码改为"%XX"的形式,xx是16进制数字所代表.
escape和unescape的编码和解码功能, escape返回16进制编码的⼀种ISO拉丁字符集. unescape的功能将具有特殊值的16进制编码转换为ASCII字符串
举例:
escape('!@#$%^&*(){}[]=:/;?+\'"'):
结果:%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%3B%3F+%27%22
encodeURI() ⽅法
Encodeuri⽅法返回⼀个编码后的URI. 因此,如果你将其结果⽤Decodeuri⽅法,原始的串会返回. Encodeuri的⽅法并不对以下字符编码:":"、"/"、"; "、"? ". 但可以使⽤ encodeuricomponent 的⽅法对这些字符进⾏encode.
encodes,⼀种 Uniform Resource Identifier (URI)(URI)逐⼀替换某些字符,描述为UTF-8编码的特点.
例如 :
encodeURI('!@#$%^&*(){}[]=:/;?+\'"'):
结果:!@#$%25%5E&*()%7B%7D%5B%5D=:/;?+'%22
encodeURIComponent() ⽅法:
encodeuricomponent ⽅法返回⼀个编码的URI. 因此,如果你将decodeuricomponent,原来的串会返回. 由于所有⽂字encodesencodeuricomponent⽅法都会进⾏编码,所以要⼩⼼,如果存在路径等串例如:
"/FOLDER1/FOLDER2/DEFAULT.HTML". 加密后并不会,如果作为⼀个⽹络服务器的请求将会失效. 使⽤这种⽅法Encodeuri 当字符串超过⼀个以上URI组成.
例⼦:最简单的⽅法就是看它们加密这些字符后⽣成的代码.
encodeURIComponent('!@#$%^&*(){}[]=:/;?+\'"'):
url编码和utf8区别结果 !%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%3B%3F%2B'%22
⼩编只⽤过escape,so起参考作⽤
以上这篇关于a href传参的中⽂乱码问题就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论