php5.4以下版本json不支持不转义内容中文的解决方法


Posted in PHP onJanuary 13, 2015

本文实例讲述了php5.4以下版本json不支持不转义内容中文的解决方法。分享给大家供大家参考。具体分析如下:

写ERP接口的时候遇到JAVA方接收这种json_encode后的内容

{"orderCode":"1401160935542399","creator":"\u751f\u6d3b\u7528\u54c1\u6d4b\u8bd5\u5c0f\u5c4b"}

其中"creator":"\u751f\u6d3b\u7528\u54c1\u6d4b\u8bd5\u5c0f\u5c4b"为中文,目前我们用的是UTF8的。但是JAVA方接收这种的时候自动把转义后的中文转回成中文的,那签名计算方式是按这个来的,签名自然对不上了。

查了PHP手册,5.4以下的不能不转义中文,但是我们服务器上的PHP版本是5.3的,于是用PHP模拟了一个JSON方法。

//模拟joson中文不转义

if (version_compare(PHP_VERSION, '5.4.0') >= 0) {

    function json_encode_ex($var) {

        return json_encode($var, JSON_UNESCAPED_UNICODE);

    }

} else {

    function json_encode_ex($var) {

        if ($var === null)

            return 'null';
        if ($var === true)

            return 'true';
        if ($var === false)

            return 'false';
        static $reps = array(

            array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"', ),

            array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"', ),

        );
        if (is_scalar($var))

            return '"' . str_replace($reps[0], $reps[1], (string) $var) . '"';
        if (!is_array($var))

            throw new Exception('JSON encoder error!');
        $isMap = false;

        $i = 0;

        foreach (array_keys($var) as $k) {

            if (!is_int($k) || $i++ != $k) {

                $isMap = true;

                break;

            }

        }
        $s = array();
        if ($isMap) {

            foreach ($var as $k => $v)

                $s[] = '"' . $k . '":' . call_user_func(__FUNCTION__, $v);
            return '{' . implode(',', $s) . '}';

        } else {

            foreach ($var as $v)

                $s[] = call_user_func(__FUNCTION__, $v);
            return '[' . implode(',', $s) . ']';

        }

    }

}

用的时候直接当内置函数用就行。json_encode_ex(array('钓鱼岛'=>'中国的'));还支持多维数组。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP脚本的10个技巧(5)
Oct 09 PHP
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
php类中private属性继承问题分析
Nov 01 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
php截取字符串函数分享
Feb 02 PHP
php生成验证码函数
Oct 20 PHP
PHP中Array相关函数简介
Jul 03 PHP
PHP反射API示例分享
Oct 08 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 #PHP
PHP针对JSON操作实例分析
Jan 12 #PHP
php页面缓存方法小结
Jan 10 #PHP
php中异常处理方法小结
Jan 09 #PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 #PHP
php模拟登陆的实现方法分析
Jan 09 #PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 #PHP
You might like
浅析php中jsonp的跨域实例
2013/06/21 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
详解js异步文件加载器
2016/01/24 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
如何用Python合并lmdb文件
2018/07/02 Python
Python中logging实例讲解
2019/01/17 Python
详解小白之KMP算法及python实现
2019/04/04 Python
OpenCV 模板匹配
2019/07/10 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
Python restful框架接口开发实现
2020/04/13 Python
Python如何急速下载第三方库详解
2020/11/02 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
航空大学应届生求职信
2013/11/10 职场文书
物业电工岗位职责
2013/11/20 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
环境卫生标语
2014/06/09 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
工程质量保证书
2015/05/09 职场文书
摩登时代观后感
2015/06/03 职场文书
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python
python基础入门之字典和集合
2021/06/13 Python