PHP JSON_DECODE/JSON_ENCODE中文内容为NULL或乱码
发布:smiling 来源: PHP粉丝网 添加日期:2013-12-04 21:23:32 浏览: 评论:0
可能用很多朋友使用json数据时利用php自带的函数JSON_DECODE/JSON_ENCODE处理中文内容时会碰到出现NULL或乱码问题,下面我来给大家介绍为什么会出现这样的问题,例:
- <?php
- $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
- var_dump(json_decode($json));
- var_dump(json_decode($json, true));
- ?>
输出结果
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
完全正确没有任何问题,那么我们测试中文,代码如下:
- <?php
- $json = '{"a":"中国人人"}';
- var_dump(json_decode($json));
- ?>
结果:{"text":null,"status":1},后来从php手册中得出,json_encode 和 json_decode只支持utf-8编码的字符,GBK的字符要用json就得转换一下,这样我们就好办了
转换一个编码,代码如下:
- /*
- 字符串GBK转码为UTF-8,数字转换为数字。
- */
- function ct2($s){
- if(is_numeric($s)) {
- return intval($s);
- } else {
- return iconv("GBK","UTF-8",$s);
- }
- }
- /*
- 批量处理gbk->utf-8
- */
- function icon_to_utf8($s) {
- if(is_array($s)) {
- foreach($s as $key => $val) {
- $s[$key] = icon_to_utf8($val);
- }
- } else {
- $s = ct2($s);
- }
- return $s;
- }
- echo json_encode(icon_to_utf8("厦门"));
这样还是有时会有问题,后来找了一种在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来,写了个函数:
- /**************************************************************
- *
- * 使用特定function对数组中所有元素做处理
- * @param string &$array 要处理的字符串
- * @param string $function 要执行的函数
- * @return boolean $apply_to_keys_also 是否也应用到key上
- * @access public
- *
- *************************************************************/
- function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
- {
- foreach ($array as $key => $value) {
- if (is_array($value)) {
- arrayRecursive($array[$key], $function, $apply_to_keys_also);
- } else {
- $array[$key] = $function($value);
- }
- if ($apply_to_keys_also && is_string($key)) {
- $new_key = $function($key);
- if ($new_key != $key) {
- $array[$new_key] = $array[$key];
- unset($array[$key]);
- }
- }
- }
- }
- /**************************************************************
- *
- * 将数组转换为JSON字符串(兼容中文)
- * @param array $array 要转换的数组
- * @return string 转换得到的json字符串
- * @access public
- *
- *************************************************************/
- function JSON($array) {
- arrayRecursive($array, 'urlencode', true);
- $json = json_encode($array);
- return urldecode($json);
- }
Tags: JSONDECODE JSONENCODE 中文
相关文章
- ·json_decode 整型溢出解决方法(2013-11-29)
- ·php中文汉字截取函数(2013-11-12)
- ·php 中解决json中文乱码的函数(2013-11-29)
- ·解决url中文无法正常显示(2013-11-29)
- ·php中中文截取函数mb_substr()详细(2013-11-30)
- ·php中iconv编码转换来解决中文乱码的问题(2013-11-30)
- ·php simplexml_load_file 中文乱码的解决方法(2013-12-06)
- ·PHP substr 截取中文乱码的问题解决办法(2013-12-07)
- ·php 截取字符串函数(中文字符串)(2013-12-11)
- ·js的escape转义中文php的转换函数(2013-12-27)
- ·php中文汉字字符串的截取问号(2014-01-12)
- ·php怎么截取中文字符串(2014-01-16)
- ·php 截取中文字符串实现程序(2014-07-27)
- ·PHP 中文大写数字 转成 数字代码(2014-08-04)
- ·php字符串与中文字符拆分方法(2014-08-04)
- ·php substr中文乱码解决办法(2014-08-15)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)