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数组内存耗用太多问题的解决方法
Apr 05 PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
PHP中include与require使用方法区别详解
Oct 19 PHP
使用PHP curl模拟浏览器抓取网站信息
Oct 28 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
php中static和const关键字用法分析
Dec 07 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
Jan 04 PHP
浅谈PHP中的那些魔术常量
Dec 02 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写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP XML数据解析代码
2010/05/26 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
php微信开发之上传临时素材
2016/06/24 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
jQuery学习笔记之Helloworld
2010/12/22 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python实现网页自动签到功能
2019/01/21 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
opencv python图像梯度实例详解
2020/02/04 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
.net软件工程师应聘上机试题
2015/03/10 面试题
Linux面试题LINUX系统类
2015/11/25 面试题
专科应届生求职信
2013/11/24 职场文书
函授毕业生的自我鉴定
2013/11/26 职场文书
联谊活动策划书
2014/01/26 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS