网站地图    收藏   

主页 > php专栏 > php函数大全 >

PHP JSON_DECODE/JSON_ENCODE中文内容为NULL或乱码 - php函

来源:自学PHP网    时间:2014-11-25 00:27 作者: 阅读:

[导读] 可能用很多朋友使用json数据时利用php自带的函数JSON_DECODE JSON_ENCODE处理中文内容时会碰到出现NULL或乱码问题,下面我来给大家介绍为什...

PHP JSON_DECODE/JSON_ENCODE中文内容为NULL或乱码

可能用很多朋友使用json数据时利用php自带的函数JSON_DECODE/JSON_ENCODE处理中文内容时会碰到出现NULL或乱码问题,下面我来给大家介绍为什么会出现这样的问题,例:

  1. <?php 
  2. $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
  3. var_dump(json_decode($json)); 
  4. var_dump(json_decode($json, true)); 
  5. ?> 

输出结果

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)
}

完全正确没有任何问题,那么我们测试中文,代码如下:

  1. <?php 
  2. $json = '{"a":"中国人人"}'
  3. var_dump(json_decode($json)); 
  4. ?> 

结果:{"text":null,"status":1},后来从php手册中得出,json_encode 和 json_decode只支持utf-8编码的字符,GBK的字符要用json就得转换一下,这样我们就好办了

转换一个编码,代码如下:

  1. /* 
  2.     字符串GBK转码为UTF-8,数字转换为数字。 
  3. */ 
  4. function ct2($s){ 
  5.     if(is_numeric($s)) { 
  6.         return intval($s); 
  7.     } else { 
  8.         return iconv("GBK","UTF-8",$s); 
  9.     } 
  10. /* 
  11.     批量处理gbk->utf-8 
  12. */ 
  13. function icon_to_utf8($s) { 
  14.   if(is_array($s)) { 
  15.     foreach($s as $key => $val) { 
  16.       $s[$key] = icon_to_utf8($val); 
  17.     } 
  18.   } else { 
  19.       $s = ct2($s); 
  20.   } 
  21.   return $s
  22. echo json_encode(icon_to_utf8("厦门")); 

这样还是有时会有问题,后来找了一种在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来,写了个函数:

  1. /************************************************************** 
  2. * 
  3. *    使用特定function对数组中所有元素做处理 
  4. *    @param    string    &$array        要处理的字符串 
  5. *    @param    string    $function    要执行的函数 
  6. *    @return boolean    $apply_to_keys_also        是否也应用到key上 
  7. *    @access public 
  8. * 
  9. *************************************************************/ 
  10. function arrayRecursive(&$array$function$apply_to_keys_also = false) 
  11.     foreach ($array as $key => $value) { 
  12.         if (is_array($value)) { 
  13.             arrayRecursive($array[$key], $function$apply_to_keys_also); 
  14.         } else { 
  15.             $array[$key] = $function($value); 
  16.         } 
  17.         if ($apply_to_keys_also && is_string($key)) { 
  18.             $new_key = $function($key); 
  19.             if ($new_key != $key) { 
  20.                 $array[$new_key] = $array[$key]; 
  21.                 unset($array[$key]); 
  22.             } 
  23.         } 
  24.     } 
  25. /************************************************************** 
  26. * 
  27. *    将数组转换为JSON字符串(兼容中文) 
  28. *    @param    array    $array        要转换的数组 
  29. *    @return string        转换得到的json字符串 
  30. *    @access public 
  31. * 
  32. *************************************************************/ 
  33. function JSON($array) { 
  34.     arrayRecursive($array'urlencode', true); 
  35.     $json = json_encode($array); 
  36.     return urldecode($json); 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论