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代码优化及php相关问题总结
Oct 09 PHP
浅谈PHP语法(1)
Oct 09 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
PHP数组操作汇总 php数组的使用技巧
Jul 17 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
PHP删除数组中特定元素的两种方法
Jul 02 PHP
php生成QRcode实例
Sep 22 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 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去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python对多属性的重复数据去重实例
2018/04/18 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
Python实现ATM系统
2020/02/17 Python
pandas DataFrame运算的实现
2020/06/14 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
幼儿教师工作感言
2014/02/14 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
前台接待岗位职责
2015/02/03 职场文书
高一英语教学反思
2016/03/03 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang