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 htmlentities和htmlspecialchars 的区别
Aug 18 PHP
PHP 源代码压缩小工具
Dec 22 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
PHP处理Json字符串解码返回NULL的解决方法
Sep 01 PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 PHP
用php来限制每个ip每天浏览页面数量的实现思路
Feb 24 PHP
PHP 9 大缓存技术总结
Sep 17 PHP
PHP消息队列用法实例分析
Feb 12 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
May 17 PHP
PHP的Json中文处理解决方案
Sep 29 PHP
Laravel框架实现定时Task Scheduling例子
Oct 22 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中cookies使用指南
2007/03/16 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
Django中反向生成models.py的实例讲解
2018/05/30 Python
python关于调用函数外的变量实例
2019/12/26 Python
python如何求100以内的素数
2020/05/27 Python
Python新手学习函数默认参数设置
2020/06/03 Python
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
工作的心得体会
2013/12/31 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
百家讲坛观后感
2015/06/12 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers