json_encode转码过程中遇到的问题

来源:互联网 发布:游戏礼包领取软件 编辑:程序博客网 时间:2024/06/08 13:23

$ch = curl.init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, value);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch);

    今天,在用curl模拟http请求,执行完curl_exec时,遇到了下列问题。因为代码需要将$result从json数据格式转化为数组,json_encode($result,true);在result有值得情况下,返回结果却是null。上网查询资料才知道原因:

1、json_encode是实现将json对象转化为数组的,但是$result中却包含着模拟http请求下来的头文件,所以,需要去掉CURLOPT_HEADER这个选项

2、因为该结果是模拟HTTP请求下来的,若内容包含\或者“”这类符号时"{\"data\":[{\"xmon_task_id\":,}",会是被转义的情况,这样json_encode将无法解析,所以需要先将这些被转义的字符,还原。可以使用如下函数, is_array($result ) ? array_map('stripslashes_deep', $result ) : stripslashes($result );

3、再对$result执行json_encode,即可成功


    今天在查询资料时,看见还有一种情况,也会出现json_encode的结果为NULL的情况:如json对象中包含有BOM头文件时,头文件

    类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,BOM是个大麻烦。
  PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个字符呢!
    window编辑器如果保存为utf8文件就会帮你加上BOM头,以告诉其他编辑器以utf8来显示字符
但是在网页上并不需要添加BOM头识别,因为网页上可以使用 head头 指定charset=utf8告诉浏览器用utf8来解释.但是你用window自动的编辑器,编辑,然后有显示在网页上这样就会显示出0xEF 0xBB 0xBF这3个字符。
这样网页上就需要去除0xEF 0xBB 0xBF,如果是该种问题,只需执行该语句

json_decode(trim($contents,chr(239).chr(187).chr(191)),true);





0 0