PHP Json函数不能处理中文的解决办法

PHP5.2 新增的 json 功能是非常受欢迎的,但是经过测试发现,json_encode
对中文的处理是有问题的:
    不能处理GB编码,所有的GB编码都会替换成空字符;
    utf8编码的中文被编码成unicode编码,相当于javascript的escape函数
处理的结果。
    为了能正确使用json,首先我们就应该在编码上采用utf8编码,然后再对
json_encode的返回结果稍加处理就可以得到正确的结果了。
?1. [代码]php代码    
<?php
/*PHP5.2 新增的 json 功能是非常受欢迎的,但是经过测试发现,json_encode
 
对中文的处理是有问题的:
 
    不能处理GB编码,所有的GB编码都会替换成空字符;
 
    utf8编码的中文被编码成unicode编码,相当于javascript的escape函数
 
处理的结果。
 
    为了能正确使用json,首先我们就应该在编码上采用utf8编码,然后再对
 
json_encode的返回结果稍加处理就可以得到正确的结果了。
 
    有一个简单的类,将这两个函数包装了一下:*/
 
    class Json
 
    {
 
     public static function encode($str)
 
     {
 
      $code = json_encode($str);
 
      return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv(‘UCS-2‘, 
 
‘UTF-8‘, pack(‘H4‘, ‘\\1‘))", $code);
 
     }http://www.huiyi8.com/donghua/?
 
     public static function decode($str)
 
     {flash动画素材
 
      return json_decode($str);
 
     }
 
    }
 
/*    使用的时候
 
    Json::encode($code);
 
    Json::decode($code);
 
    这样可以正确处理utf8编码的中文了。
 
    PS:对于GB编码的中文,我们可以在编码时先转成UTF8编码,再进行编码
 
,解码的时候再进行一个utf8 -> gb的转换就可以了。
 
    另外一般json_encode的结果我们是返回到客户端来使用,我们其实还可
 
以用javascript的unescape函数来对unicode编码的中文进行解码,从而还原
 
成正确的中文。
 
    或者用:
 
    $title = mb_convert_encoding($title, ‘HTML-ENTITIES‘, $this-
 
>_outCharset);*/
 
    //任意编码下都正常显示
?>
?

PHP Json函数不能处理中文的解决办法

时间: 2024-10-11 00:13:54

PHP Json函数不能处理中文的解决办法的相关文章

PHP中文乱码解决办法

一.         首先是PHP网页的编码 1.     php文件本身的编码与网页的编码应匹配 a.     如果欲使用gb2312编码,那么php要输出头:header("Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANS

mysql like 匹配查询出不正确中文的解决办法

本文讲述mysql使用like语句时,匹配查询出不正确中文的解决办法 mysql like 搜索的时候发现,用 select title from tb_name where title like '%a%' 的时候出来的结果除了包含a的名字外连包含中文“新”的名字也出现在搜索结果里面,这令我想弄清楚mysql的匹配模式和规则到底是怎么样的,另外在匹配的时候正则表达式也很常用! 出现这个问题的原因是:MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认

navicat for mysql 显示中文乱码解决办法

navicat for mysql 显示中文乱码解决办法   最近遇到一个问题,用navicat for mysql 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题就的寻求解决之道,百度了好长时间也没解决,网上那些解决办法都不 适合我的问题,网上的大多数解决方法是在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用mysql字符集”前的对勾,在编码 里选择utf-8,这种方法对于部分问题可能适合,但是我的乱码问题依然存在,于是乎我又将ut

QQ打不出中文的解决办法

先把语言栏关了,再开始---运行,运行ctfmon就好了QQ打不出中文的解决办法

Oracle导入中文乱码解决办法

Oracle导入中文乱码解决办法 一.确保各个客户端字符集的编码同服务器字符集编码一致 1-       确定sqlplus字符集编码,如果是windows设置环境变量. 2-       确保SecureCRT客户端的字符集为简体中文即可,不要设置为UTF-8,否则在连接oralce数据库时,中文都显示乱码,以免产生不必要的麻烦. 二.设置带中文的sql脚本的字符集

【转】sublime text 2 中文乱码解决办法

sublime text 2是一款非常优秀的跨平台文本及源代码编辑器,本人非常喜欢,但是不支持GB2312和GBK编码在某些时候比较麻烦.可以通过向sublime text 中添加编码类型转换包(比如“ConvertToUTF8")来解决这一问题.具体方法如下: 首先声明:这一方法前提是sublime text 2的安装路径没有中文字符,且系统路径的%username%中不包含中文字符.否则需要手动添加转换包,这个稍后说明. 1. 安装Sublime Package Control: 在Subl

[Linux] - CentOS中文乱码解决办法

CentOS 7 终端中文乱码解决办法: 1.使用vim编辑locale.config文件: vim /etc/locale.conf 2.将LANG="en_US.UTF-8"修改为: LANG="zh_CN.GB18030" LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en" SY

Linux下Tomcat向MySQL插入数据中文乱码解决办法

Linux下Tomcat向MySQL插入数据中文乱码解决办法 一.问题 在windows上面使用eclipse开发的项目在windows上面运行一切正常,部署到腾讯云时出现向MySQL数据库中插入数据是中文乱码 二.解决办法 1.尝试一直接在linux上面使用insert语句插入中文,正常2.尝试二在tomcat配置文件server.xml中加入useBodyEncodingForURI="true",不行3.尝试三在tomcat配置文件server.xml中再加入URIEncodin

Ajax在IE浏览器会出现中文乱码解决办法

在AJAX浏览器来进行发送数据时,一般它所默认的都是UTF-8的编码. Ajax在IE浏览器会出现中文乱码的情况!解决办法如下 <script type="text/javascript"> function showDiv(str){ document.getElementById("picDiv").style.display=""; var xmlhttp; if (str==""){ document.ge