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 相关文章推荐
Zend framework处理一个http请求的流程分析
Feb 08 PHP
php递归实现无限分类生成下拉列表的函数
Aug 08 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
php生成圆角图片的方法
Apr 07 PHP
PHP常用的小程序代码段
Nov 14 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
PHP实现文件下载【实例分享】
Apr 28 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
python 实现性别识别
2020/11/21 Python
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
档案接收函范文
2014/01/10 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
会员活动策划方案
2014/08/19 职场文书
交通事故协议书范本
2014/11/18 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS