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个技巧(7)
Oct 09 PHP
PHP静态新闻列表自动生成代码
Jun 14 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
Jan 07 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
PHP微信红包生成代码分享
Oct 06 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
Mar 02 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
php与paypal整合方法
2010/11/28 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
vuex提交state&&实时监听state数据的改变方法
2018/09/16 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
python如何在终端里面显示一张图片
2016/08/17 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
Python装饰器简单用法实例小结
2018/12/03 Python
java判断三位数的实例讲解
2019/06/10 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
浅谈python 类方法/静态方法
2020/09/18 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
旅游项目开发策划书
2014/01/18 职场文书
投标担保书范文
2014/04/02 职场文书
毕业设计说明书
2014/05/07 职场文书
邓小平理论心得体会
2014/09/09 职场文书
2016教师国培研修感言
2015/12/08 职场文书