乱码是因为编码不同而造成的。在ajax post 或 get时都有可能出现乱码。
为了避免乱码,可以做到以下几步
解决方法
1,保持编码的统一,包括文件编码,数据库编码,网页content-type编码
检查一下<meta http-equiv=”content-type” content=”text/html; charset=UTF-8″ />
建议中文都是用UTF-8,使用gbk/gb2312有可能会出现乱码
2,使用post来发送而不是get
get方法是会通过链接来传递参数,而且会自动urlEncode(编码),而各个浏览器编码的方式可能不太一样。使用post可以避免这种情况。
3,通过在js前端escape编码再发送,然后后台解码取得数据
这些可以在网上搜索
4,在全局设定contentType,指定编码
因为jquery ajax是使用utf-8来编码发送数据的,ie在发送时却没加上charset=utf-8,从而导致乱码(IE默认使用iso-8859-1编码)
$.ajaxSetup({ contentType: "application/x-www-form-urlencoded; charset=utf-8" }); |
14条评论
php里get中文也有这个问题
get方法是会通过链接来传递参数,而且会自动urlEncode(编码) 。
原来如此,那么就是浏览器显示的时候是已经urlDecode了?
还有在litspeed环境下面,参数包含http://是会出错的,估计木有自动urlEncode,o(* ̄▽ ̄*)ゞ ~
貌似IE是用iso-8859-1来编码链接,而chrome用utf-8编码,无论哪种编码,最后英文字母都是一样
例如链接
“http://www.baidu.com/s?wd=http://测试”
在chrome按utf-8编码变成了http://www.baidu.com/s?wd=http://%B2%E2%CA%D4
在ie中编码中中文不同(因为用iso-8859-1标准编码)
浏览器显示时是因为后台程序接收时解码了。
说错了,chrome 中的编码unicode变为 测试=%E6%B5%8B%E8%AF%95
ie的貌似是gbk编码
这里有篇文章:http://www.kuqin.com/webpagedesign/20100216/79756.html
第二条,Get时候尽量避免使用中文
嗯。。。中文的话最好自己编码再解码。。
额,看着那些就怕,觉得好难啊!
“IE默认使用iso-8859-1编码”,这句说错了,IE默认使用gbk
这要看什么操作系统,什么版本的IE,英文操作系统,英文IE,默认好像是iso-8859-1
“IE默认使用iso-8859-1编码”,这句说错了,IE默认使用gbk
还真没验证过到底用的是什么编码。。。
这才是问题的关键呢!
其它都是浮云啊!
$.ajaxSetup({ contentType: “application/x-www-form-urlencoded; charset=utf-8”});第四个没用啊 ,加上了