======================================================
注:本文源代码点此下载
======================================================
//如果传送参数是直接赋予的,就会产生乱码!
http_request.open("post",url,true);
http_request.setrequestheader('content-type', 'application/x-www-form-urlencoded');
http_request.send("action="+strname+"&val="+val);//如果val的值为中文,则产生乱码
//解决方法很简单:使用javascript中的escape(string) 函数
http_request.open("post",url,true);
http_request.setrequestheader('content-type', 'application/x-www-form-urlencoded');
http_request.send("action="+strname+"&val="+escape(val));//val的值为中文不会产生乱码
关于在ajax中get回的responsetext中文乱码的最简解决办法
用ajax来get回一个页面时,responsetext里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responsetext的时候,是把resposebody按utf-8编码进解码考形成的,如果服务器送出的确实是utf-8的数据流的时候汉字会正确显示,而送出了gbk编码流的时候就乱了。解决的办法就是在送出的流里面加一个header,指明送出的是什么编码流,这样xmlhttp就不会乱搞了。
php:header('content-type:text/html;charset=gb2312');
asp:response.charset("gb2312")
jsp:response.setheader("charset","gb2312");
=======================================================
/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:王力猛 (wallimn)
时间:2006-11-15
/***********本人原创,欢迎转载,转载请保留本人信息*************/
给大家推荐一个旅游网站:www.trip58.com
今天终于解决了ajax的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:xp, eclipse,使用gb18030编码。
当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站utf-8编码;请求头编码为中文;使用javascript中的escape函数。
使用get方式提交数据的时候,中文问题很好解决,setrequestheader("content-type","text/html; encoding=gb18030")就可以了。但这个方法在post方式中却不起作用。大家都知道get方式提交数据有长度限制,有时我们必须使用post方式来提交数据。
但对于post方式,使用上述的几种方法经过多次测试,问题依旧。我郁闷了好几天。
今天把问题解决了,很简单,是使用escape(或encodeuri,两个函数javascript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这是解决问题的关键。
我的例子涉及两个页面,一个是初始页面,一个是ajax请求处理页面。
初始页面内容如下(hello.jsp):
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
分析:当调用request.getparameter()函数时,会自动进行一次uri的解码过程,调用时内置的解码过程会导致乱码出现。而uri编码两次后,request.getparameter()函数得到的是原信息uri编码一次的内容。再用可控的解码函数java.net.urldecoder.decode()就可解出原始的正确的信息。
以上分析纯属个人看法,不知是否正确。
用过ajax的朋友肯定知道javascript是使用utf-8国际编码,即每个汉字用4个字节来存储,但是这就造成了用ajax来send数据的时候出现乱码。
有一种解决办法就是使用encodeuricomponent加上修改 content-type 为 application/x-www-form-urlencoded" 来把数据统一编码成 url 格式,当然,也可以指定编码,如:“application/x-www-form-urlencoded; charset=utf-8 ”,例子:http_request = new activexobject("msxml2.xmlhttp"); http_request.setrequestheader("content-type","application/x-www-form-urlencoded;
charset=utf-8");
另一种方法就是通过vbscript 的写的函数把数据转成gb2312格式的,我个人觉得这种方法比较好。有兴趣的朋友可以到网上去查一下。
也可以在js发送数据之前用escape函数把data转换为16进制的字符串,用js读取数据的时候再用unescape转换回来就ok了。
今天突发奇想,ajax调用的时候会不会发送cookie 呢?马上写了一个程序测试一下,果然能,这样就可以在调用ajax之前,先把数据通过javascript写到cookie里,然后再send就可以将cookie里的数据发送出去了,太爽了!!
演示地址:http://cn5.cn/ajax/ajax12.htm
客户端代码 ajax.htm
ajax使用cookie传值例子
ajax使用cookie传值例子:
name:
value:
在此显示状态
服务器端代码 a.php
----------------
第一,javascript沿用java的字符处理方式,内部是使用unicode来处理所有字符的,
第二,utf-8是每个汉字(unicode字符)用3个字节来存储。
第三,用utf-8来send数据是不会出现乱码的,是后台程序没有正确解码才会出现乱码。
第四,ajax发送数据的时候如果修改 content-type 为 application/x-www-form-urlencoded",肯定是用post方式,而“太大的数据往往会出错”是用get方式发送数据造成的。
第五,用vbscript写的函数是用来把数据转成gbk编码(操作系统默认的编码方式。如果在繁体系统上就是big5之类的编码)的,而不是gb2312,两者的编码字符数量相差3倍左右。
第六,用cookie来发送数据,一是很容易溢出,二是要不停的擦屁股,否则cookie里面的数据在每个http请求(包括图片和脚本请求)中都会被发送。三是并发几个http请求的时候,没有办法指定那个cookie是要发送给那个http请求的。
------------------------
用ajax来get回一个页面时,responsetext里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responsetext的时候,是把resposebody按utf-8编码进解码考形成的,如果服务器送出的确实是utf-8的数据流的时候汉字会正确显示,而送出了gbk编码流的时候就乱了。解决的办法就是在送出的流里面加一个header,指明送出的是什么编码流,这样xmlhttp就不会乱搞了。
php:header('content-type:text/html;charset=gb2312');
asp:response.charset("gb2312")
jsp:response.setheader("charset","gb2312");
使用ajax获取服务器数据返回给客户端,出现中文乱码。在之前的一个ajax应用中指定codepage=936,将所有页面编码都指定为gb2312即可解决。
这次的应用中却无起作用了,经过多次的试验,客服端的编码应该绝对没有问题的。可以判断问题一定出在服务器端。稍微分析一下可知虽然服务器端指定了文件的编码格式,但对于服务器输出流就成为了怀疑的对象。由于使用ms sql2000,采用unicode编码,所以返回数据给客户端将会出现unicode编码的中文在gb2312编码页面显示的问题。于是在服务器端输出流加一个header:
asp程序中加入即解决了这个问题。
同样在php和jsp程序中的书写类似
php:header('content-type:text/html;charset=gb2312');
jsp:response.setheader("charset","gb2312");
ajax产生乱码的原因整理如下
1、xtmlhttp 返回的数据默认的字符编码是utf-8,如果客户端页面是gb2312或者其它编码数据就会产生乱码
2、post方法提交数据默认的字符编码是utf-8,如果服务器端是gb2312或其他编码数据就会产生乱码
解决办法有:
1、若客户端是gb2312编码,则在服务器指定输出流编码
2、服务器端和客户端都使用utf-8编码
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/