解决json_encode 函数中文被编码成 null的办法
发布:smiling 来源: PHP粉丝网 添加日期:2017-03-23 10:24:31 浏览: 评论:0
json_encode 对英文及uft8编码一般不会有什么问题了,但是如果是gkb或中文时就会碰到一些问题了,今天我们就一起来看一篇关于json_encode 函数中文被编码成 null的问题的解决办法.
json格式在开发中用的十分广泛。在php中json_encode函数可以直接将数组转成 json格式,十分方便。但是有可能你在使用json_encode函数时,无奈的发现中文被编码成null了。原来json只支持转义utf-8编码格式的中文。php数组使用json_encode函数中文被编码成null的原因是转义gbk 或者别的编码时,中文被忽略了。一般出现在文档编码或者输出的内容编码是非UTF-8时,也就是说,GBK或者GB2312的中文,就会出现编码失败的现象。
php数组使用json_encode函数中文被编码成null的原因和解决办法,如果你的程序是采用utf-8编码,请确保文件保存为utf-8 无bom格式,如果你的程序是gbk的,可以先转成utf-8编码后在使用json_encode函数
在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式,但是转换后的中文会变成Unicode编码。
- <?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″}
Tags: 中文 函数 编码
相关文章
- ·PHP中文乱码问题及解决方法(2013-11-27)
- ·PHP中文URL编解码详细说明(2013-11-28)
- ·php中文目录 include错误解决(2013-11-29)
- ·在php中中文乱码解决方法(2013-11-29)
- ·php json_encode中文乱码解决办法(2013-11-29)
- ·php开发中常见的中文乱码处理办法(2013-11-30)
- ·php+jquery+json中文乱码(2013-11-30)
- ·php和mysql中uft-8中文编码乱码的几种解决办法(2013-11-30)
- ·php+CKFinder上传中文名文件乱码问题的解决方法(2013-12-02)
- ·phpMyAdmin显示中文乱码的解决方法(2013-12-02)
- ·php导出excel中文乱码解决办法总结(2013-12-03)
- ·PHP连接MySQL数据库中文乱码解决方法(2013-12-03)
- ·php中json_encode中文字符乱码解决办法(2013-12-03)
- ·PHP中截取中文乱码解决办法(2013-12-03)
- ·php中文字符串截取乱码问题解决方法(2013-12-04)
- ·json_encode 中文显示问题解决方法(2013-12-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)