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语法(4)
Oct 09 PHP
php 分页类 扩展代码
Jun 11 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
用PHP读取超大文件的实例代码
Apr 01 PHP
php教程之phpize使用方法
Feb 12 PHP
php一行代码获取文件后缀名实例分析
Nov 12 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
Aug 28 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
PHP空值检测函数与方法汇总
Nov 19 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序列号生成函数和字符串替换函数代码
2012/06/07 PHP
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
js实现放大镜特效
2017/05/18 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
JS中的防抖与节流及作用详解
2019/04/01 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
微信跳一跳自动运行python脚本
2018/01/08 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
Python读取YAML文件过程详解
2019/12/30 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
护士检查书
2014/01/17 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2014年个人年终总结
2015/03/09 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
Python django中如何使用restful框架
2021/06/23 Python
php双向队列实例讲解
2021/11/17 PHP
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android