ajax中文乱码解决


======================================================
注:本文源代码点此下载
======================================================

//如果传送参数是直接赋予的,就会产生乱码!

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)

电邮:wallimn@sohu.com

博客:http://wallimn.bokee.com

时间: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^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值