最近使用jQuery遇到中文乱码问题,其实他的中文乱码就是因为contentType没有指定编码,只需在jQuery.js中搜索’contentType’然后在application/x-www-form-urlencoded后面加上; charset=UTF-8最终变成contentType:"application/x-www-form-urlencoded; charset=UTF-8"
问题搞定。
AJAX的中文乱码可以大概分为两中:
第一种是向服务器端发送中文参数
这种经过我自己的测试,最简单的方法其实就是进行urlencode(php/javascript/asp.net都提供相应的功能函数,很方便,都成功通过测试)。(详细请参考URI (RFC-2396)字符串进行编码)
javascript: 编码encodeURI <---> 解码decodeURI
var url_dirname=encodeURI("中文"); //编码
var dirname=decodeURI(url_dirname); //解码
php: 编码urlencode <---> 解码urldecode
$url_dirname=urlencode('中文'); //编码
$dirname=urldecode $url_dirname(); //解码
asp.net 编码Server.UrlEncode<---> 解码Server.UrlDecode
string url_dirname=Server.UrlEncode('中文'); //编码
string dirname=Server.UrlDecode( url_dirname); //解码
我在前台页面用javascript 的encodeURI对中文参数进行编码, 后台则用php的urldecode 或asp.net的Server.UrlDeconde函数进行解码,是完全没问题的哦,因为有RFC-2396标准嘛!
第二种就是服务器端向客户端输出中文时出现乱码
最简单的做法是将三个页面(前台html页面,jquery.js脚本页面,后台cgi页面这三个页面)都强制统一采用utf-8或统一采用gb2312编码(在这里建议采用utf-8,要与国际接轨嘛,呵呵),如果还不行,也可以在jquery.js里面做点小修改,具体做法便是
打开jQuery.js文件,找到"application/x-www-form-urlencoded",在其后面加上
"; charset=UTF-8"
即最终变成
contentType:"application/x-www-form-urlencoded; charset=UTF-8"