本文实例讲述了jquery中post传递中文出现的解决方法,即乱码ajax与jquery.ajax中文参数post传递乱码处理方法。分享给大家供大家参考。具体分析如下:
问题一:
今天在做项目时,需要用到ajax,之前我在用get方式传递中文参数时,只需要在后台程序中设置页面编码为gb2312即中文能正常显示,可是这次由于表单项目较多,不适合用get方式传递,只能用post方式,但发现后台程序中设置编码为gb2312时中文还是显示的乱码。经过一番研究问题才最终得到解决。
解决方法:
解决此问题的方法非常简单,只需要在js处理参数时用escape()函数处理一下即可,而且不需要再用unescape()解码,这个方法适合post和get方式,具体的ajax代码这里我不例出,这里给出用escape()函数处理参数时的代码:
复制代码 代码如下:
var htmer =getcode=+escape(getcode)+&content=+escape(content);
通常我们在处理ajax的时候会在这里直接获取参数的值,为了使中文参数不是乱码,我们只需要用escape()函数对参数处理下即可。
问题二:
当网站页面不是utf-8编码时,ajax提交的中文便会变成乱码。
解决方法如下:
找到jquery.js里的contenttype:application/x-www-form-urlencoded,将它改成contenttype:application/x-www-form-urlencoded; charset=utf-8就可以了。
原因:未指定charset时,jquery使用iso-8859-1,iso8859-1,通常叫做latin-1。latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。jquery的ajax根本没有考虑到国际化的问题,而使用了欧洲的字符集,所以传递中文时才会出现乱码
我很久以前一直在使用prototype框架。在.net-gb2312或jsp教程-utf8下都使用过,从来没遇到有字符编码的问题。于是将prototype和jquery代码都下载下来打开研究原因。
不同之处在于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中文传递的问题。
只需要简单的将jquery的代码加以修改,加上charset=utf-8就可以了,这样不需要改变改什么web.config或什么在页面中改编码什么的了,也不需要用escapc(str)再在服务端解码。英文怎么传递,中文也怎么传递。
这里给段简单的代码测试一下:
test.html页面代码:
复制代码 代码如下: