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 需要掌握的东西 不做浮躁的人
Dec 28 PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
PHP自定义函数格式化json数据示例
Sep 14 PHP
php简单统计中文个数的方法
Sep 30 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
PHP实现考试倒计时功能代码
Apr 16 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
php常用数学函数汇总
2014/11/21 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
Bootstrap基础学习
2015/06/16 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
详解Python3中ceil()函数用法
2019/02/19 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
女大学生自我鉴定
2013/12/09 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
党员公开承诺书
2014/03/25 职场文书
会计师事务所实习证明
2014/11/16 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
西岭雪山导游词
2015/02/06 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技