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模拟HTTP认证
Oct 09 PHP
怎样才能成为PHP高手?学会“懒惰”的编程
Dec 05 PHP
PHP 全角转半角实现代码
May 16 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 PHP
解析php开发中的中文编码问题
Aug 08 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
CodeIgniter输出中文乱码的两种解决办法
Jun 12 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
Oct 20 PHP
PHP中的Session对象如何使用
Sep 25 PHP
PHP数组实例详解
Jun 26 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
一个简单的php路由类
2016/05/29 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
js调用flash的效果代码
2008/04/26 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
jquery获取节点名称
2015/04/26 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
JavaScript手机振动API
2016/06/11 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
用Python编写web API的教程
2015/04/30 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
python实现批量注册网站用户的示例
2019/02/22 Python
python 瀑布线指标编写实例
2020/06/03 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
法国在线药房:1001Pharmacies
2021/03/07 全球购物
《长江之歌》教学反思
2014/04/17 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
白莲教口号
2014/06/18 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
停发工资证明范本
2015/06/12 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技