Ajax开发:php与Javascript通讯的字符编码问题
最近做一个项目时,使用Ajax技术,在Javascript脚本访问php服务模块,然后将php服务模块返回的信息经Javascript处理后显示在页面中,但发现信息中含有中文字符时,就会出现如下问题:
1.php服务模块获取Javascript脚本提交信息时,无法将接收到的中文信息放到SQL语句中执行;
2.Javascript脚本获取php服务模块返回信息时,无法接收到中文信息。
经过研究,判断是因为二种语言中对字符编码处理不同导致问题,上网查找相关资料,大多都介绍写一段php函数进行字符编码解码,对性能有一定影响,并且要针对每种字符编码编写专用的函数,有没有更方便的解决方案呢?
在php手册中找到了解决方案,方案有二种:
1.使用iconv函数转换字符编码,该函数仅能在PHP4.0.5以上版本或PHP5.x版本使用,具体用法如下:
$string=iconv(原字符编码, 字符输出编码, $string);
例如:网页使用gbk编码,字符串使用utf-8编码,将字符转换为网页显示编码。
echo iconv("uft-8", "gbk", "php编码转换");
在实际使用中,iconv函数在转换时存在一点小bug,在转换字符串中含有"—"时会出错,导致字符串无法转换,使用//IGNORE参数可以忽略转换中的字符错误,样例如下:
echo iconv("uft-8", "gbk//IGNORE", "php编码转换");
2.使用mb_convert_encoding函数,该函数仅能在PHP4.0.6以上版本或PHP5.x版本使用,使用之前必须enable mbstring,具体用法如下:
$string=mb_convert_encoding($string, 字符输出编码, 原字符编码);
例如:网页使用gbk编码,字符串使用utf-8编码,将字符转换为网页显示编码。
echo mb_convert_encoding("php编码转换", "gbk", "utf-8");
总结:推荐使用mb_convert_encoding函数,该函数无iconv转换字符错误问题。