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 相关文章推荐
简单易用的计数器(数据库)
Oct 09 PHP
如何在WIN2K下安装PHP4.04
Oct 09 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
PHPMyAdmin 快速配置方法
May 11 PHP
完美实现GIF动画缩略图的php代码
Jan 02 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
Jul 03 PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 PHP
PHP7内核之Reference详解
Mar 14 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 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
用mysql内存表来代替php session的类
2009/02/01 PHP
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
详解JavaScript树结构
2017/01/09 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
通过js实现压缩图片上传功能
2020/02/25 Javascript
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
python 实现归并排序算法
2012/06/05 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
Python jieba库用法及实例解析
2019/11/04 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
python 怎样进行内存管理
2020/11/10 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
大学校园毕业自我鉴定
2014/01/15 职场文书
十佳青年个人事迹材料
2014/01/28 职场文书
办公室岗位职责
2014/02/12 职场文书
入党积极分子考察意见
2015/06/02 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript