使用XMLHttpRequest将中文数据提交到服务器时,ajax的默认编码为utf8,并且提交中文时会出现乱码. 为了解决这个问题ajax参数乱码,百度花了一天的时间,研究了一天,现在把这些经历写下来备忘. (我很健忘,^ _ ^)
首先,要弄清楚: 如果要避免出现乱码的麻烦,请使用utf8对整个程序进行编码. 但是,我们不可避免地在PHP编程中遇到中文乱码的问题.
AJAX处理数据从程序执行过程中出现乱码分为两种:
一个是发送给后台程序的中文本身是乱码,因为zxmlHTTP使用javascript的字处理机制并使用UTF-8编码. 但是,如果后台页面使用GB2312或其他类型的编码,则接收到的数据自然会出现乱码.
另一种情况是,当接收到数据然后返回数据时,字符会出现乱码. 这也是由于后台页面使用的编码和Javascript编码之间的差异. 默认情况下,服务器脚本返回的字符将使用服务器编码,例如GB2312.
以下将解决这两个问题:
(1)服务器发回乱码数据的情况:
在这种情况下ajax参数乱码,我们只需要向服务器发送回数据的页面添加一个文件头,该文件头定义了编码. 在定义文件头信息时,根据脚本,可以使用以下方法:
PHP: 标头(“内容类型: 文本/ html;字符集= GB2312”);
ASP: Response.Charset(“ GB2312”)
JSP: response.setHeader(“ Charset”,“ GB2312”);
(2)发送中文信息时出现乱码:
实际上,无论采用哪种编码方式,我们输入的汉字都将以UTF-8格式正确发送到服务器,但不会像服务器接收时所期望的那样被解码,而是服务器使用默认值. 字符编码方法通常是GB2312来解码信息. 那么我们看到的字符自然是错误的.
我们都知道XMLHTTP有两种发送数据的方式,一种是GET,另一种是POST.
1. GET的乱码:
此解决方案相对简单,只要添加定义编码的标头信息:
setRequestHeader(“ Content-Type”,“ text / html; encoding = gb2312”);
这样,客户端通过GET发送到服务器的数据将被服务器脚本正确解释为GB2312,并因此被解码.
2. POST的乱码:
更困难的部分是当使用POST方法发送数据时,上述方法无效. 因为POST数据使用的内容类型为:
xmlObj.setRequestHeader(“内容类型”,“应用程序/ x-www-form-urlencoded”);
无处定义字符编码. 我在解决此问题时遇到了很大的困难,但找到了更好的解决方案.
首先在客户端上,汉字经过URL编码,然后发送到服务器. 也就是说,使用函数encodeURI():
postStr =“ remark =” + encodeURI(document. form1.remark.value);
xmlhttp.open(“ POST”,“ ./modules/mm/inventory/inv_adjustSubmit.php”,true);
xmlhttp.onreadystatechange = inv_response;
xmlhttp.setRequestHeader(“内容类型”,“应用程序/ x-www-form-urlencoded;”);
xmlhttp.send(postStr);
然后从服务器接收到值后,使用iconv()函数对字符串进行重新编码!
标题(“内容类型: 文本/ html;字符集= GBK”);
$备注= iconv(“ UTF-8”,“ GBK”,$ _ POST [“备注”]);
注意: 此处使用GBK编码是因为我们在连接时会使用它
mysql_query(“ SET NAMES'GBK'”); //显示中文
因此,如果将其更改为GB2312,则将中文数据插入时会出现问题.
警告:
1. 为了减少在页面上写乱码的麻烦,最好在每个页面上添加编码: meta切记要在脚本脚本输出之前,否则可能会出现乱码.
charset = gb2312” />
但他不懂股票
面粉也生虫子
或者就去找他的老婆睡觉去