转自:https://www.cnblogs.com/phper12580/p/10184394.html
json_decode这个函数是json_encode的反函数,一般传递数据的时候为了压缩数据,会将数组格式的数据转换成json格式,用到的函数就是json_encode,然后接收到数据之后再用json_decode转换回数组;
json_decode($json)之后可能出现返回空,null等结果,这个时候一般都是json格式出问题, 可以用json_last_error()来检查,json_last_error()函数的使用方式就是在json_decode之后添加这个函数, 函数会返回值,返回0说明格式没错, 若返回4,说明格式错误。
折磨了好几个小时,终于找到了解决办法,现在记录如下:
第一种:
json_encode()中文在gbk/gb2312中对中文返回为null,而json_decode()函数只支持UTF-8与ASCII编码,如果是gkb就会出问题;
解决办法:
第一种:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/** * UTF-8编码 GBK编码相互转换/(支持数组) * @param array $str 字符串,支持数组传递 * @return array */ function array_iconv( $str ){ if ( is_array ( $str )) { foreach ( $str as $k => $v ) { $str [ $k ] = array_iconv( $v ); } return $str ; } else { if ( is_string ( $str )) { return iconv( 'GBK//IGNORE' , 'UTF-8' , $str ); } else { return $str ; } } } echo json_encode(icon_to_utf8( $str )); |
第二种:bom头导致的bug,bom头的产生应该是你的文件在windows下用记事本这些东西编辑过之后的后果。 因为bom头是看不见的, 所以转换的时候前面多了三个字节,
解决办法:可用$json = substr ( $json, 3 );去掉头部的三个字节, 转换之后ok了。
最后再介绍一种,原因是
(1)$str只能UTF-8编码
(2)元素最后不能有逗号(与php的array不同)
(3)元素不能使用单引号
(4)元素值中间不能有空格和n,必须替换
解决方法:
1
2
3
4
5
6
|
$data = stripslashes (html_entity_decode( $info )); //$info是传递过来的json字符串 $data = json_decode( $data ,TRUE); //这时候$data就是解析后的数组了! //html_entity_decode() 函数的作用是把 HTML 实体转换为字符。 //stripslashes() 函数的作用是删除反斜杠。 |
更多精彩内容:各种AI课程、技能课程、黑科技软件、网站小程序源码、副业小项目、PPT模板等精品素材、电商课程、推广引流课程等,尽在 天边资源网 。