PHP json_encode()函数json不转义中文问题解决办法

如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 例如:
echo json_encode(array('你好'));
// 输出: ["\u4f60\u597d"]
这非常恼人, 像是一堆乱码, JSON 标准从来没有说要把非 ASCII 字符转义, 标准说的是”Any UNICODE character”.
如何禁用掉这种转义呢? 答案是, PHP 自带的 json_encode() 不能禁用这个特性(在 5.4.0 版本之前, 之后的版本你可以加 JSON_UNESCAPED_UNICODE 选项), 你只能换一个新的 JSON 库. 为了简单, 我简单写了几十行代码, 实现一个 json_encode().
 

 代码如下 复制代码
class Util
{
    static function json_encode($input){
        // 从 PHP 5.4.0 起, 增加了这个选项.
        if(defined('JSON_UNESCAPED_UNICODE')){
            return json_encode($input, JSON_UNESCAPED_UNICODE);
        }
        if(is_string($input)){
            $text = $input;
            $text = str_replace('\\', '\\\\', $text);
            $text = str_replace(
                array("\r", "\n", "\t", "\""),
                array('\r', '\n', '\t', '\\"'),
                $text);
            return '"' . $text . '"';
        }else if(is_array($input) || is_object($input)){
            $arr = array();
            $is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));
            foreach($input as $k=>$v){
                if($is_obj){
                    $arr[] = self::json_encode($k) . ':' . self::json_encode($v);
                }else{
                    $arr[] = self::json_encode($v);
                }
            }
            if($is_obj){
                return '{' . join(',', $arr) . '}';
            }else{
                return '[' . join(',', $arr) . ']';
            }
        }else{
            return $input . '';
        }
    }
}

考虑不到的地方, 例如判断关联数组(is_obj)的地方, 遇到问题再说. 你要是不喜欢类, 那就自己转成纯函数, 换个名字吧.

时间: 2024-09-04 07:29:23

PHP json_encode()函数json不转义中文问题解决办法的相关文章

PHP使用json_encode函数时不转义中文的解决方法_php技巧

本文实例讲述了PHP使用json_encode函数时不转义中文的解决方法.分享给大家供大家参考.具体方法如下: json_encode函数对于gbk中的中文字符是不会转换的或直接转换成空格了,本文就来给各位整理一个关于json不转义中文问题处理技巧,相信对大家有所帮助. 如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 例如: 复制代码 代码如下: echo json_encode(array('你好')); // 输出: ["\u4f60\u597

Python的中文问题解决办法

Python的中文问题解决办法 python 的 eclips教程环境后写了一个测试程序.结果出现这样的错误: SyntaxError: Non-ASCII character 'xbd' in file E:workspacemakeUpdatafilesIndexsrcmakeIndex.py on line 12, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 原因是它不

PHP json_encode() 函数详解及中文乱码问题_php实例

在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它. 这个函数的功能是将数值转换成json数据存储格式. <?php $arr = array ( 'Name'=>'希亚', 'Age'=> ); $jsonencode = json_encode($arr); echo $jsonencode; ?> 程序运行结果如下: {"Name":null,"Age&

PHP和JAVA的XML-RPC中文问题解决办法

xml|解决|问题|中文       问题描述:      在使用PHP和JAVA操作XML-RPC的时候,如果request中包含中文字符,会被自动编码成如下样式: 欢欢 .       环境:PHP内置XML-RPC的API,Apache的XML-RPC的JAVA API       PHP下的解决方法:      起初以为是中文字符的编码问题,所以我就尝试用各种编码方式来编码中文字符,然后交给string xmlrpc_encode_request ( string method, mix

PHP和JAVA的XML-RPC中文问题解决办法_php基础

      问题描述:      在使用PHP和JAVA操作XML-RPC的时候,如果request中包含中文字符,会被自动编码成如下样式: 欢欢 .       环境:PHP内置XML-RPC的API,Apache的XML-RPC的JAVA API       PHP下的解决方法:      起初以为是中文字符的编码问题,所以我就尝试用各种编码方式来编码中文字符,然后交给string xmlrpc_encode_request ( string method, mixed params)函数来

Haroopad中文乱码不支持中文问题解决办法

 安装Haroopad之后发现编辑器中输入的中文字体看不到,而右边的预览框中显示正常,真的是让人头大.最后在网上找到了解决办法:   在"文件"下打开"偏好设置",选择编辑器,找到默认主题,点击编辑,如图:   可以看到default.css文件,修改成如下,字体可以根据自己喜欢修改,重新启动软件即可 /**   You can only use the following style.   - color, font-family, font-style   -

Gvim里不能输入中文问题解决办法

有一段时间没有用Ubuntu了,今天感觉Windows太卡了,就换到了Ubutn下面,想看看是不是会快点.打开了Gvim,打了几个中文,发现一打第二个字母的时候,输入法就自己退出了-..试了好多次,都没有能成功. Fine-Google it!网上走了一圈,有的讲需要加上本地的中文字符的语言支持,如这样:  代码如下 复制代码 sudo gedit /home/limy/.bashrc 在最后添加:LC_CTYPE="zh_CN.utf8,关闭. sudo gedit /etc/environm

PowerPoint 2007 中无法输入中文问题解决办法

从开始菜单找到"控制面板",双击"区域和语言选项". 收起这个图片展开这个图片     收起这个图片展开这个图片   在弹出的窗口中,切换到"语言"选项卡,单击"详细信息"按钮. 收起这个图片展开这个图片   进入"文字服务和输入语言"设置窗口,单击"高级"选项卡,默认状态下"关闭高级文字服务"复选框前是没有勾选的,如果有,请将其清除.然后退出设置窗口. 收起这个图片

解决json_encode 函数中文被编码成 null的办法

json格式在开发中用的十分广泛.在php中json_encode函数可以直接将数组转成 json格式,十分方便.但是有可能你在使用json_encode函数时,无奈的发现中文被编码成null了.原来json只支持转义utf-8编码格式的中文.php数组使用json_encode函数中文被编码成null的原因是转义gbk 或者别的编码时,中文被忽略了.一般出现在文档编码或者输出的内容编码是非UTF-8时,也就是说,GBK或者GB2312的中文,就会出现编码失败的现象. php数组使用json_e