首页 > 编程知识 正文

php echo 解析,php中echo怎么输出的

时间:2023-05-05 18:17:55 阅读:277668 作者:453

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

/默认为:{"test":"u6211u662fu6d4bu8bd5"}

虽然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":"u53c2u6570u4e0du5b8cu6574uff0cu4ea4u6613u5931u8d25","CardID":""}

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

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

$data="JSON中文";

$newData=iconv("GB2312","UTF-8//IGNORE",$data);

echo $newData;

?>

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

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

$testJSON=array('name'=>'中文字符串','value'=>'test');

echo json_encode($testJSON);

?>

查看输出结果为:

{“name”:”u4e2du6587u5b57u7b26u4e32″,”value”:”test”}

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

解决办法:

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

$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码再进行解码,解码函数如下:

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));

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。