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+mysql扎实个人基本功
Mar 27 PHP
轻松修复Discuz!数据库
May 03 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
php导入excel文件到mysql数据库的方法
Jan 14 PHP
PHP也能干大事 随机函数
Apr 14 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
Yii框架表单模型和验证用法
May 20 PHP
zend framework重定向方法小结
May 28 PHP
php实现将base64格式图片保存在指定目录的方法
Oct 13 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
php优化查询foreach代码实例讲解
Mar 24 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
python递归计算N!的方法
2015/05/05 Python
在Django的session中使用User对象的方法
2015/07/23 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
历史学专业毕业生求职信
2013/09/27 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
运动会邀请函范文
2014/02/06 职场文书
2015年幼师工作总结
2015/04/28 职场文书
活动主持人开场白
2015/05/28 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
学校教学管理制度
2015/08/06 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL