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加MYSQL服务器
Oct 09 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
Jan 02 PHP
php Ajax乱码
Apr 09 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
PHP中数组定义的几种方法
Sep 01 PHP
YII路径的用法总结
Jul 09 PHP
MyEclipse常用配置图文教程
Sep 11 PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 PHP
利用PHP将部分内容用星号替换
Apr 21 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
php封装一个异常的处理类
Jun 08 PHP
php使用自带dom扩展进行元素匹配的原理解析
May 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
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
学习ExtJS table布局
2009/10/08 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
python中pygame模块用法实例
2014/10/09 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
python内存动态分配过程详解
2019/07/15 Python
python tkinter实现连连看游戏
2020/11/16 Python
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
本科生职业生涯规划书范文
2014/01/21 职场文书
厨师长岗位职责
2014/03/02 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA