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正则校验用户名介绍
Jul 19 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
php对称加密算法示例
May 07 PHP
php格式化电话号码的方法
Apr 24 PHP
培养自己的php编码规范
Sep 28 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
PHP环形链表实现方法示例
Sep 15 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
Oct 17 PHP
浅谈php常用的7大框架的优缺点
Jul 20 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存储session的php代码
2008/01/10 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue实现购物车列表
2020/06/30 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
工程班组长岗位职责
2013/12/30 职场文书
农民致富事迹材料
2014/01/23 职场文书
幼儿园新年寄语
2014/04/03 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
2016新年问候语大全
2015/11/11 职场文书
找规律教学反思
2016/02/23 职场文书
教学反思怎么写
2016/02/24 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
QT与javascript交互数据的实现
2021/05/26 Javascript
你真的会用Mysql的explain吗
2022/03/31 MySQL
Go gorilla/sessions库安装使用
2022/08/14 Golang