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中的观察者模式
Mar 24 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
Sep 20 PHP
第四章 php数学运算
Dec 30 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
PHP、Java des加密解密实例
Apr 27 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 PHP
PHP explode()函数用法讲解
Feb 15 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 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
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
php 信息采集程序代码
2009/03/17 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
利用js对象弹出一个层
2008/03/26 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
2018/08/14 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
python实现趣味图片字符化
2019/04/30 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
python selenium 获取接口数据的实现
2020/12/07 Python
jupyter 添加不同内核的操作
2021/02/06 Python
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
幼儿园中班下学期评语
2014/04/18 职场文书
批评与自我批评范文
2014/10/15 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
python实现手机推送 代码也就10行左右
2022/04/12 Python
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python