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获取金书网的书名的实现代码
Jun 11 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 PHP
PHP调试的强悍利器之PHPDBG
Feb 22 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 27 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
php项目中类的自动加载实例讲解
Sep 12 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 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 多个submit提交表单 处理方法
2009/07/07 PHP
PHP使用数组实现队列
2012/02/05 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
JavaScript中的Array对象使用说明
2011/01/17 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
跟老齐学Python之复习if语句
2014/10/02 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
python中upper是做什么用的
2020/07/20 Python
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
弘扬民族精神演讲稿
2014/05/07 职场文书
趣味运动会开幕词
2015/01/28 职场文书
《假如》教学反思
2016/02/17 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
python运行脚本文件的三种方法实例
2022/06/25 Python