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 相关文章推荐
MySQL数据源表结构图示
Jun 05 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
Jun 25 PHP
php图片的二进制转换实现方法
Dec 15 PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
php简单smarty入门程序实例
Jun 11 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
php对微信支付回调处理的方法
Aug 23 PHP
php定期拉取数据对比方法实例
Sep 22 PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
js获取提交的字符串的字节数
2009/02/09 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
python访问类中docstring注释的实现方法
2015/05/04 Python
Python sorted对list和dict排序
2020/06/09 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
销售主管竞聘书
2014/03/31 职场文书
社会实践活动总结范文
2014/07/03 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
迎新生欢迎词
2015/01/23 职场文书