视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
如何解决php ajax传值乱码的问题
2020-11-02 18:25:32 责编:小采
文档


php ajax传值乱码的解决办法:1、将前后台页面以及数据库统一采用UTF8编码;2、在存入数据库时使用“mysql_query("set names gb2312");”方法;3、使用ICONV函数对从数据库中取出的字符串进行编码转换。

推荐:《PHP视频教程》

在php网站开发中,为了增加用户体验度,Ajax是一种经常使用的技术,但是对于初学者来说,时常会碰到Ajax传值中文字符串时变成乱码的问题,有什么办法可以解决PHP AJAX传值中文字符乱码的问题呢?

  我们知道Ajax技术由JavaScript演变而来,而javascript使用UTF-8编码,当前后台页面采用GBK或者其他编码,同时没有进行编码转换时,就会出现中文字符乱码问题。

PHP Ajax传值中文字符乱码解决方法

  方法一、前后台页面以及数据库统一采用UTF8编码,这是最简单的方法。

  方法二、当网站已采用了诸如GBK/GB2312编码时,分两种情况:

  1、Ajax发送中文字符、PHP(后台程序)进行接收发生乱码时,使用GBK与UTF8的转换函数对接受的字符串进行编码转换,再存入相关数据库,这里假设数据库采用的编码是GBK或者GB2312,如果配置的PHP运行环境支持ICONV函数,你也可使用ICONV函数进行编码转换,然后在存入数据库时

mysql_query("set names gb2312");

即可解决Ajax传值中文乱码问题。

  2、PHP发送中文字符、Ajax(前台页面)进行接收发生乱码时,同样可以使用ICONV函数对从数据库中取出的字符串进行编码转换,再传值至Ajax前台,即responseText。或者在PHP(后台程序)输出字符流之前加上

header('Content-type: text/html;charset=gb2312');

即可。特别指出:在使用Ajax做多级联动(比如省份城市联动)时,采用xml交互形式,在输出XML之前也必须加上header。

  同时贴出GB2312与UTF8的转换函数,方便大家在遇到Ajax中文乱码问题时多一种解决方法。

function gb2utf8($gb,$filename)
{
 if(!trim($gb))
 return $gb;
 //$filename="gb2312.txt";
 $tmp=file($filename);
 $codetable=array();
 while(list($key,$value)=each($tmp))
 $codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
 $utf8="";
 while($gb)
 {
 if (ord(substr($gb,0,1))>127)
 {
 $thisgb=substr($gb,0,2);
 $gb=substr($gb,2,strlen($gb));
 $utf8.=u2utf8(hexdec($codetable[hexdec(bin2hex($thisgb))-0x8080]));
 }
 else
 {
 $gb=substr($gb,1,strlen($gb));
 $utf8.=u2utf8(substr($gb,0,1));
 }
 }
 $ret="";
 for($i=0;$i<strlen($utf8);$i+=3)
 $ret.=chr(substr($utf8,$i,3));
 return $ret;
}
function u2utf8($c)
{
 for($i=0;$i<count($c);$i++)
 $str="";
 if ($c < 0x80) {
 $str.=$c;
 }
 else if ($c < 0x800) {
 $str.=(0xC0 $c>>6);
 $str.=(0x80 $c & 0x3F);
 }
 else if ($c < 0x10000) {
 $str.=(0xE0 $c>>12);
 $str.=(0x80 $c>>6 & 0x3F);
 $str.=(0x80 $c & 0x3F);
 }
 else if ($c < 0x200000) {
 $str.=(0xF0 $c>>18);
 $str.=(0x80 $c>>12 & 0x3F);
 $str.=(0x80 $c>>6 & 0x3F);
 $str.=(0x80 $c & 0x3F);
 }
 return $str;
}

注:此函数需要使用GB2312中文编码表,请点击这里下载,由于是采用gb2312,对于一些比较生僻的词在转换时可能会出现乱码。

下载本文
显示全文
专题