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程序中的常见漏洞进行攻击
Oct 09 PHP
discuz安全提问算法
Jun 06 PHP
php MsSql server时遇到的中文编码问题
Jun 11 PHP
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 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
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
基于empty函数的判断详解
2013/06/17 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
javascript 多级checkbox选择效果
2009/08/20 Javascript
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
详解jquery选择器的原理
2017/08/01 jQuery
webpack将js打包后的map文件详解
2018/02/22 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
介绍Python中的文档测试模块
2015/04/28 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
python opencv之SIFT算法示例
2018/02/24 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
大码女装:Ulla Popken
2019/08/06 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
西安众合通用.net笔试题
2013/03/18 面试题
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
Python 数据科学 Matplotlib图库详解
2021/07/07 Python