文档章节

echo json_encode() 输出中文不显示

ITCHN
 ITCHN
发布于 2016/12/19 17:21
字数 823
阅读 537
收藏 0

PHP默认的json_encode编码出来的是unicode编码的,也就是\u的编码,用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”\u***”的格式。

/默认为:{"test":"\u6211\u662f\u6d4b\u8bd5"} 

虽然unicode编码可以在不同的页面中编码不会出现乱码问题。但是一个汉字编码成unicode会变成\u+4个字符,增加了字符串的长度,还会在一定程度上增加传输的数据量.

程序问题: 1.页面使用GBK编码格式,当字符串内有汉字是,echo 没数据输出 把汉字改成英文则有数据输出

{"ResponseCode":"01","ResponseInfo":"english","CardID":""}

json_encode出null的问题 如果文档编码或者字符串编码(例如UTF-8抓取了一个GBK页面)为非UTF-8,就会出现json_encode编码失败的问题,变现为输出汉字为null。

解决的方法就是在json_encode之前用iconv函数将汉字转为UTF-8。

2.页面使用UTF-8编码,有数据输出,但是出现乱码

{"ResponseCode":"01","ResponseInfo":"\u53c2\u6570\u4e0d\u5b8c\u6574\uff0c\u4ea4\u6613\u5931\u8d25","CardID":""}

原因: PHP5.2或以上的版本把json_encode作为内置函数来用,但只支持utf-8编码的字符,否则中文就会出现乱码或者空值

解决办法如下: 保证在使用JSON处理的时候字符是以UTF8编码的,如果喜欢用gbk编码的话,可以在进行JSON处理前,把字符转为UTF8形式。 1.转换中文字符串格式

<?php   
     $data="JSON中文";   
     $newData=iconv("GB2312","UTF-8//IGNORE",$data);   
     echo $newData;   

 ?>
 //ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。

2.页面编码为UTF-8或者已经把字符转为UTF-8,使用json_encode将PHP中的array数组转为JSON字符串

<?php   
        $testJSON=array('name'=>'中文字符串','value'=>'test');   
       echo json_encode($testJSON);   
   ?>    

查看输出结果为:
{“name”:”\u4e2d\u6587\u5b57\u7b26\u4e32″,”value”:”test”}

可见即使用UTF8编码的字符,使用json_encode也出现了中文乱码。

解决办法:

在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode,输出结果的时候在用函数urldecode()转回来。具体如下:

 <?php   
          $testJSON=array('name'=>'中文字符串','value'=>'test');   
                       foreach ( $testJSON as $key => $value ) {   
                                         $testJSON[$key] = urlencode ( $value );   
          }   
       echo urldecode ( json_encode ( $testJSON ) );   
  ?>   
此时输出结果为: {“name”:”中文字符串”,”value”:”test”}

总结: 中文字符串必须为UTF-8编码,且需要进行urlencode() 编码和urldecode() 解码进行输出

方法二: PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。 为json_encode()设置第二个参数 JSON_UNESCAPED_UNICODE

$url = '中国';
//echo json_encode($url);  乱码
echo json_encode($url,JSON_UNESCAPED_UNICODE  );  //正常输出

JSON_UNESCAPED_UNICODE :以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。** 自 PHP 5.4.0 起生效**

方法三

对unicode码再进行解码,解码函数如下:

<?php
function decodeUnicode($str)
{
return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
create_function(
'$matches',
'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
),
$str);
}

$arr = array('name1'=>"中文",'name2'=>'abc12');
echo decodeUnicode(json_encode($arr));

© 著作权归作者所有

共有 人打赏支持
ITCHN
粉丝 1
博文 97
码字总数 43324
作品 0
石家庄
程序员
私信 提问
cjson.encode中utf8的问题

openrestry中, 为什么cjson.encode({abc:"中文展示"})输出的中文真的是中文,而不是编码后的?要调用iconv强制转码么? local json = require "cjson" local data={abc:"中文展示"} ngx.say(js......

geminiblue
2015/04/28
1K
0
PHP 输出中文 JSON 字符串

PHP 和 JavaScript 交互其实很方便,PHP 原生也提供了对 JSON 格式的支持。主要包括 JSON 编码和解码两个函数: 1 jsonendoce: http://cn.php.net/jsonencode 2 jsondedoce: http://cn.php.n...

cnu2m
2014/10/21
0
0
PHP json_encode() 函数详解及中文乱码问题

在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。 这个函数的功能是将数值转换成json数据存储格式。 ? 1 2 3 4 5 6 7 8 9 程序运...

zyt_1978
2016/06/19
31
0
json_encode参数

$ar = array("word" => "中文","test"=>array(),'aaa'=>"4"); echo json_encode($ar,JSON_UNESCAPED_UNICODE JSON_FORCE_OBJECT JSON_NUMERIC_CHECK JSON_PRETTY_PRINT); { "word": "中文", ......

沉淀岁月
2016/11/16
30
0
php json_encode返回json出错

我使用php的json_encode直接将数组echo,结果浏览器显示中文为???,同时firefox的jsonview插件不起作用。

Callen
2013/12/14
2.1K
2

没有更多内容

加载失败,请刷新页面

加载更多

mongodb副本集部署

常识: replset + shard replset是副本集,shard是分片 mongoDB的主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性。而副本集具有多个副本保证了容错性,就算一个副本挂掉了还有...

谢思华
3分钟前
0
0
知名协作工具 Slack 换新 logo 啦!

简评:本文系译文。Slack 在自家 Blog 上解释了新的设计 —— 旧版的 logo 有 11 种颜色,在非白色背景的情况下,logo 不仅难看,而且很容易在多个地方上表现不一致。 新年换新装,Slack 已经...

极光推送
4分钟前
0
0
java程序向mysql插入中文变问号

我碰到的问题是使用客户端工具插入中文是没问题的,但是用java程序就变成问号了。 遇到这种问题肯定是字符集造成的,先检查数据库,表的字符集,都是utf8,然后看页面,程序等等等等都是utf...

hengbao5
6分钟前
1
0
边缘计算的爆发为安防全产业带来了怎样的变化?

随着物联网的快速发展以及数据处理 2.0 时代的来临,边缘计算很快成为了广受追捧的热门技术。IDC 数据显示,未来超过 50% 的数据需要在网络边缘侧分析、处理和存储,边缘计算市场规模将超万亿...

七牛云
10分钟前
0
0
中小企业如何借力工业互联网抵抗死亡潮?

对于不同的企业来说,跨步进入工业互联网的核心问题并不是“怎么做”,而是“能做什么”、以及“能不能做”。 尤其是在政策大力推动企业“上云上平台”的过程中,企业投入人力和成本,那么“...

阿里云云栖社区
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部