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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
php 数组的指针操作实现代码
Feb 08 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
php多进程模拟并发事务产生的问题小结
Dec 07 PHP
laravel-admin select框默认选中的方法
Oct 03 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
Mac下关于PHP环境和扩展的安装详解
Oct 17 PHP
php的无刷新操作实现方法分析
Feb 28 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将csv文件导入到mysql数据库的方法
2014/12/24 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
在Python中移动目录结构的方法
2016/01/31 Python
Python生成随机密码的方法
2017/06/16 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Django CBV类的用法详解
2019/07/26 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
C语言面试题
2015/10/30 面试题
承办会议欢迎词
2014/01/17 职场文书
运动会方阵解说词
2014/02/12 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
四年级学生评语大全
2014/04/21 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
事业单位聘任报告
2015/03/02 职场文书
2015年纪委工作总结
2015/05/13 职场文书
医院病假条怎么写
2015/08/17 职场文书
Python基础知识之变量的详解
2021/04/14 Python