日期:2014-05-16  浏览次数:20883 次

修改JQUERY源码彻底解决AJAX传递中文后台乱码现象

许多人在使用JQuery.ajax方法时肯定会遇到一个问题。在编码不是UTF-8的时候,当传递的参数里有中文的时候,服务端Request的 时候都会出现乱码。本人最近也遇到了需要传递中文参数的问题。在网上搜索一下,复制粘贴发的到处都是的“终极”“解决方案”无非就是 escape(str)来转码,然后在服务端还要写个方法再编辑一次,或用System.Text.Encoding下的方法来换来换去。

?

我很久以前一直在使用Prototype框架。在.net-GB2312或jsp-utf8下都使用过,从来没遇到有字符编码的问题。于是将Prototype和JQuery代码都下载下来打开研究原因。具体结果如下

diyblPic

?

不同之处在于JQuery默认的contentType:application/x-www-form-urlencoded

而Prototype则是contentType:application/x-www-form-urlencoded; charset=UTF-8

这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1

ISO8859-1,通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。

JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题。

而我们的UTF-8则可以解决这一问题。

?

最终指需要修改JQuery的代码,显式声明contentType使用utf-8字符集,即可解决GB2312中文传递的问题。

修改如图:

diyblPic

?

只需要简单的将JQuery的代码加以修改,加上charset=UTF-8就可以了,这样不需要改变改什么web.config或什么在页面中改编码什么的了,也不需要用escapc(str)再在服务端解码。英文怎么传递,中文也怎么传递。

?

?

?

?

用了之后发现还是不行,郁闷 ,我就用了如下方法,成功了!

前台JSP:

var shopName = document.getElementById("shopName").value ;
??? ?? var shopLocation = document.getElementById("shopLocation").value ;
??? ?? var furl = "updateShop.jsp?shopName="+shopName+"&shopLocation="+shopLocation+"&lat="+lat+"&lng="+lng+"" ;
??? ?? furl = encodeURI(furl);
??? ?? furl = encodeURI(furl);

?

后台:

String shopName = request.getParameter("shopName");
??? ??? ??? ??? String shopLocation = request.getParameter("shopLocation");
??? ??? ??? ???
??? ??? ??? ??? shopName = java.net.URLDecoder.decode(shopName,"UTF-8");
??? ??? ??? ??? shopLocation = java.net.URLDecoder.decode(shopLocation,"UTF-8");

?

OK!!!

1 楼 lifei6671 2011-02-16  
这么说来你还没有彻底解决啊。也是用了编码转换!
2 楼 lifei6671 2011-08-23  
是啊,还是用了编码!