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 相关文章推荐
Zend公司全球首推PHP认证
Oct 09 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
PHP中使用curl伪造IP的简单方法
Aug 07 PHP
PHP生成和获取XML格式数据的方法
Mar 04 PHP
PDO::quote讲解
Jan 29 PHP
php intval函数用法总结
Apr 14 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 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 404错误页面实现代码
2009/06/22 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
js数组的操作详解
2013/03/27 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
javascript实现计算器功能
2020/03/30 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python实现二叉搜索树
2016/02/03 Python
python生成二维码的实例详解
2017/10/29 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
django富文本编辑器的实现示例
2019/04/10 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
艺术学院毕业生求职信
2014/07/09 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
自我检讨书范文
2015/01/28 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
烛光里的微笑观后感
2015/06/17 职场文书