编写Ajax时发现浏览器显示乱码,细究,发现与encodeURIComponent函数有关。
javascript中有6个和编码有关的内置函数分别是:
escape,unescape,encodeURI,decodeURI,encodeURIComponent,decodeURIComponent
escape(javascript1.0)编码空格、标点符号及其它不位于 ASCII 字母表的字符,除了以下字符: * @ - _ + . / (NN编码@)
encodeURI(javascript1.5)先将字符转化为UTF-8然后再编码,不会被此方法编码的字符:! @ # $ & * ( ) = : / ; ? + ' , - _ .
encodeURIComponent(javascript1.5)先将字符转换为UTF-8然后再编码,不会被此方法编码的字符:! * ( ) . ' - _
所以用XMLHttpRequest传送经过encodeURI或者encodeURICompnent转换后的内容会变为UTF-8编码后传给服务器,服务器接受的是UTF-8编码过的内容,如果在将它显示在Content-Type: text/html;charset=gb2312的页面中就会出现乱码了。
要消除乱码,第一当然可以不用encodeURI或 encodeURICompnent函数而采用escape函数,然后将XMLHttpRequest传回来的内容再经过unescape转换就可以了,但是这种办法并不被推荐,因为它不能对“统一资源标识符(URI)”进行编码。第二个办法是采用encodeURI或 encodeURIComponent函数,但是要将转换为UTF-8
javascript中有6个和编码有关的内置函数分别是:
escape,unescape,encodeURI,decodeURI,encodeURIComponent,decodeURIComponent
escape(javascript1.0)编码空格、标点符号及其它不位于 ASCII 字母表的字符,除了以下字符: * @ - _ + . / (NN编码@)
encodeURI(javascript1.5)先将字符转化为UTF-8然后再编码,不会被此方法编码的字符:! @ # $ & * ( ) = : / ; ? + ' , - _ .
encodeURIComponent(javascript1.5)先将字符转换为UTF-8然后再编码,不会被此方法编码的字符:! * ( ) . ' - _
所以用XMLHttpRequest传送经过encodeURI或者encodeURICompnent转换后的内容会变为UTF-8编码后传给服务器,服务器接受的是UTF-8编码过的内容,如果在将它显示在Content-Type: text/html;charset=gb2312的页面中就会出现乱码了。
要消除乱码,第一当然可以不用encodeURI或 encodeURICompnent函数而采用escape函数,然后将XMLHttpRequest传回来的内容再经过unescape转换就可以了,但是这种办法并不被推荐,因为它不能对“统一资源标识符(URI)”进行编码。第二个办法是采用encodeURI或 encodeURIComponent函数,但是要将转换为UTF-8