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


Posted in PHP onNovember 12, 2014

本文实例讲述了PHP使用json_encode函数时不转义中文的解决方法。分享给大家供大家参考。具体方法如下:

json_encode函数对于gbk中的中文字符是不会转换的或直接转换成空格了,本文就来给各位整理一个关于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)的地方, 遇到问题再说. 你要是不喜欢类, 那就自己转成纯函数, 换个名字吧。

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
支持中文字母数字、自定义字体php验证码代码
Feb 27 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
php获取QQ头像并显示的方法
Dec 23 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
Jan 08 PHP
PHP的几个常用加密函数
Feb 03 PHP
php array_key_exists() 与 isset() 的区别
Oct 24 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
PHP7移除的扩展和SAPI
Mar 09 PHP
imagettftext() 失效,不起作用
Mar 09 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 #PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 #PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 #PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 #PHP
PHP之sprintf函数用法详解
Nov 12 #PHP
php中simplexml_load_file函数用法实例
Nov 12 #PHP
php实现的ping端口函数实例
Nov 12 #PHP
You might like
php自动载入类用法实例分析
2016/06/24 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
用Python编写简单的定时器的方法
2015/05/02 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
python中lambda()的用法
2017/11/16 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
python的等深分箱实例
2019/11/22 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
统计每一学生的平均成绩
2014/06/06 面试题
解释一下钝化(Swap out)
2016/12/26 面试题
新郎新娘婚礼答谢词
2014/01/11 职场文书
感恩节红领巾广播稿
2014/02/11 职场文书
政风行风建设责任书
2014/07/23 职场文书
岗位职责说明书模板
2014/07/30 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
中学生学习保证书
2015/02/26 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server