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
我的论坛源代码(二)
Oct 09 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
相对路径转化成绝对路径
Apr 10 PHP
php 破解防盗链图片函数
Dec 09 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
PHP四大安全策略
Mar 12 PHP
PHP单例模式详细介绍
Jul 01 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
PHP中Trait及其应用详解
Feb 14 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
php如何把表单内容提交到数据库
Jul 08 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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
PHP使用函数用法详解
2018/09/30 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
PHP实现简单的计算器
2020/08/28 PHP
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
Angular2 http jsonp的实例详解
2017/08/31 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
2018/08/25 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python类和函数中使用静态变量的方法
2015/05/09 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
Pytorch 实现权重初始化
2019/12/31 Python
Python多线程多进程实例对比解析
2020/03/12 Python
python实现横向拼接图片
2020/03/23 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
8种常用的Python工具
2020/08/05 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
请用用Java代码写一个堆栈
2012/01/26 面试题
关于vue中如何监听数组变化
2021/04/28 Vue.js
Python 绘制多因子柱状图
2022/05/11 Python