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模板,主要想体现一下思路
Dec 25 PHP
ExtJS与PHP、MySQL实现存储的方法
Apr 02 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
PHP运行模式的深入理解
Jun 03 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
php导出CSV抽象类实例
Sep 24 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 PHP
使用 PHPStorm 开发 Laravel
Mar 24 PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 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
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
PHP分页显示制作详细讲解
2006/10/09 PHP
PHP 多进程 解决难题
2009/06/22 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
js 判断 enter 事件
2009/02/12 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
Angular2库初探
2017/03/01 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
美国钻石商店:Zales
2016/11/20 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
自书遗嘱范文
2015/08/07 职场文书
外出考察学习心得体会
2016/01/18 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
一行Python命令实现批量加水印
2022/04/07 Python