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 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
php实现插入排序
Mar 29 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
laravel-admin 在列表页添加自定义按钮的例子
Sep 30 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和.net中des加解密的实现方法
2013/02/27 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
浅谈Vue.js
2017/03/02 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
python机器学习之神经网络(一)
2017/12/20 Python
django中使用POST方法获取POST数据
2019/08/20 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
在Python中实现字典反转案例
2020/12/05 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
应用英语专业自荐信
2014/01/26 职场文书
北体毕业生求职信
2014/02/28 职场文书
行政诉讼答辩状
2015/05/21 职场文书
SQL Server内存机制浅探
2022/04/06 SQL Server
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android