php json中文编码为null的解决办法


Posted in PHP onDecember 14, 2016

今天使用json_encode函数,发现中文竟成了null。

原因分析:使用json_encode函数应应使用utf-8编码,我的页面用的是gbk.

解决:在json_encode函数前使用iconv('gbk','utf8')函数。函数

function gbk2utf8($data)
{
 if(is_array($data))
  {
    return array_map('gbk2utf8', $data);
  }
 return iconv('gbk','utf-8',$data);
}

//以下是找的另一种方法

PHP从数据库中得到的字段是中文,想用json_encode()后返回给前台,可是json_encode对中文编码后为null。

在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。

这个函数的功能是将数值转换成json数据存储格式。

<?php
$arr = array
    (
     'Name'=>'希亚',
     'Age'=>20
    );

$jsonencode = json_encode($arr);
echo $jsonencode;
?>

程序运行结果如下:
{"Name":null,"Age":20}
json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf-8 编码,我认为是前端的 Javascript 也是 utf-8 的原因。

<?php
$array = array
	(
	 	'title'=>iconv('gb2312','utf-8','这里是中文标题'),
		'body'=>'abcd...'
	);

echo json_encode($array);
?>

这个程序的运行结果为:
{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}
数组中所有中文在json_encode之后都不见了或者出现\u2353等。
解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。

<?php
/**************************************************************
 *
 *	使用特定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)
{
  static $recursive_counter = 0;
  if (++$recursive_counter > 1000) {
    die('possible deep recursion attack');
  }
  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]);
      }
    }
  }
  $recursive_counter--;
}
 
/**************************************************************
 *
 *	将数组转换为JSON字符串(兼容中文)
 *	@param	array	$array		要转换的数组
 *	@return string		转换得到的json字符串
 *	@access public
 *
 *************************************************************/
function JSON($array) {
	arrayRecursive($array, 'urlencode', true);
	$json = json_encode($array);
	return urldecode($json);
}

$array = array
    (
     'Name'=>'希亚',
     'Age'=>20
    );


echo JSON($array);
?>

这次成功了,运行结果如下:
{"Name":"希亚","Age":"20"}

PHP 相关文章推荐
在PHP中使用灵巧的体系结构
Oct 09 PHP
傻瓜化配置PHP环境――Appserv
Dec 13 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
php多重接口的实现方法
Jun 20 PHP
PHP实现加强版加密解密类实例
Jul 29 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
Mar 30 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 #PHP
Thinkphp整合微信支付功能
Dec 14 #PHP
php判断是否连接上网络的方法实例详解
Dec 14 #PHP
基于php实现的验证码小程序
Dec 13 #PHP
php 微信开发获取用户信息如何实现
Dec 13 #PHP
php断点续传之文件分割合并详解
Dec 13 #PHP
php json_encode与json_decode详解及实例
Dec 13 #PHP
You might like
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
php堆排序(heapsort)练习
2013/11/13 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
解析js如何获取css样式
2016/12/11 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
三星美国官网:Samsung美国
2017/02/06 全球购物
优良学风班申请材料
2014/02/13 职场文书
学校标语大全
2014/06/19 职场文书
教书育人演讲稿
2014/09/11 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
车间主任岗位职责
2015/02/03 职场文书
学校证明范文
2015/06/24 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js