xmlhttp.open("POST", "/function/ajax/chat_send.php", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send("msg=中文");
这是Ajax在post数据时的关键代码。我尝试了大部分方法,无论是添加xmlhttp.setRequestHeader("scriptCharset", "gbk");
还是.js文档的编码改为gbk,都没有任何用!因为xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
已经强制客户端使用编码utf-8,如果服务器使用GBK编码,又没有对utf-8进行处理,就会显示乱码。
解决方案:只能从服务端入手,手动转换post过来的数据,并且返回的数据还要再从gbk转回utf-8。PHP代码如下:
$str = iconv("UTF-8", "gbk", $_POST["msg"]); //Ajax传入数据时使用的一定是utf-8
如果后端是Java则比较方便,直接在接收post代码前加上:
request.setCharacterEncoding("UTF-8");
后来了解到,前端通过jQuery其实也可以曲线解决这个编码问题。
当时为了让前端Ajax直接使用gbk编码,耗费了大量时间,最终还是无功而返。估计这个功能在设计时就没有考虑不同编码盛行的汉字圈的使用。
这就是为什么中国一定要科技领先、要制定国际标准。不然就是这个下场:utf-8的汉字都要占3个字节,我们还得自己做一个2字节的gbk。因为编码转换,国人在软件开发时消耗了更多精力,付出了很多没必要的学习成本。谁让东西都是别人做出来的,用着别人家的东西,还能说些什么呢?
欢迎来到Yari的网站:yar2001 » Ajax向服务器POST数据时强制使用UTF-8 解决中文乱码问题