echojson_encode()输出中⽂不显⽰
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));
phpjson格式化输出
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论