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 adodb连接带密码access数据库实例,测试成功
May 14 PHP
php下封装较好的数字分页方法
Nov 23 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
PHP经典面试题集锦
Mar 19 PHP
PHP生成条形码大揭秘
Sep 24 PHP
php强大的时间转换函数strtotime
Feb 18 PHP
Linux php 中文乱码的快速解决方法
May 13 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 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
php session应用实例 登录验证
2009/03/16 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
python+django加载静态网页模板解析
2017/12/12 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
Python 如何展开嵌套的序列
2020/08/01 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
大专生自荐信
2013/10/04 职场文书
日语专业毕业生自荐信
2013/11/11 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
保密工作责任书
2014/04/16 职场文书
红十字会救护培训简讯
2015/07/20 职场文书