QQ咨询 官方微信

添加微信好友

官方小程序

百度小程序

微信小程序

头条小程序

关于我们

PHP基础

php中json_encode 中文变成null

 admin  2017-03-05 11:56:36
在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数组转化成json数据存储格式!

$arr = array(
  'name' => '小明',
  'age' => '16',
);
$jsonencode = json_encode($arr);
echo $jsonencode;

运行结果:

{"name":null,"age":16}

json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf-8 编码.

$arr = array(
  'title' => iconv('gb2312', 'utf-8', '这里是中文标题'),
  'body' => '16',
);
$jsonencode = json_encode($arr);
echo $jsonencode;

结果如下:

{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"16"}
数组中所有中文在json_encode之后都不见了或者出现\u2353等。

解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。
  1. <?php  
  2. /**************************************************************  
  3.  
  4. * 使用特定function对数组中所有元素做处理  
  5. * @param string &$array 要处理的字符串  
  6. * @param string $function 要执行的函数  
  7. * @return boolean $apply_to_keys_also 是否也应用到key上  
  8. * @access public  
  9.  
  10. *************************************************************/  
  11. function arrayRecursive(&$array, $function, $apply_to_keys_also = false) {  
  12.    static $recursive_counter = 0;  
  13.    if (++$recursive_counter > 1000) {  
  14.      die('possible deep recursion attack');  
  15.    }  
  16.    foreach ($array as $key => $value) {  
  17.      if (is_array($value)) {  
  18.        arrayRecursive($array[$key], $function, $apply_to_keys_also);  
  19.      } else {  
  20.        $array[$key] = $function($value);  
  21.    }  
  22.    if ($apply_to_keys_also && is_string($key)) {  
  23.      $new_key = $function($key);  
  24.      if ($new_key != $key) {  
  25.        $array[$new_key] = $array[$key];  
  26.        unset($array[$key]);  
  27.      }  
  28.    }  
  29. }  
  30. $recursive_counter--;  
  31. }  
  32.   
  33. /**************************************************************  
  34.  
  35. * 将数组转换为JSON字符串(兼容中文)  
  36. * @param array $array 要转换的数组  
  37. * @return string 转换得到的json字符串  
  38. * @access public  
  39.  
  40. *************************************************************/  
  41. function JSON($array) {  
  42.   arrayRecursive($array, 'urlencode'true);  
  43.   $json = json_encode($array);  
  44.   return urldecode($json);  
  45. }  
  46. $array = array (  
  47. 'Name'=>'小明',  
  48. 'Age'=>'20'  
  49. );  
  50. echo JSON($array);  
  51.   
  52. ?>  
结果如下
{"Name":"小明","Age":"20"} 


¥ 打赏
×
如果您觉得文章帮助了您就打赏一下吧
非常感谢你的打赏,我们将继续分享更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

本文《php中json_encode 中文变成null》发布于石头博客文章,作者:admin,如若转载,请注明出处:https://www.pweb123.com/html/php/681.html,否则禁止转载,谢谢配合!

文章点评

我来说两句 已有0条评论
点击图片更换

添加微信好友

添加微信好友

微信小程序

百度小程序