php file_get_contents返回的数据是乱码

今天在用file_get_contents($url)获取一个url的json数据时发现,数据是乱码。
在这里插入图片描述
用浏览器直接访问这个url也是显示乱码。
在这里插入图片描述
我们发现,这两种乱码是不一样的,上面的是全部乱码,而下面的英文字母是没有乱码的。
像下面那种,英文字母没有乱码,一般就是文字编码有问题。这里就是源数据是UTF-8字符集编码的,被页面以UTF-8字符集显示出来了,可以用php的iconv(‘utf-8’,‘gbk’,‘5鏃ユ槦鏈熸棩’)将数据转为gbk字符集的,就可以正常以gbk编码显示出来了。

而上面那种全部乱码的,就是因为数据被gzip压缩编码过的。解决方法有以下两种:
1、找个ungzip的函数来转换下
2、给你的url加个前缀,这样调用

$content = file_get_contents("compress.zlib://".$url);
//无论页面是否经过gzip压缩,上述代码都可以正常工作!

3、使用curl

function curl_get($url, $gzip=false){
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
        if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 关键在这里
        $content = curl_exec($curl);
        curl_close($curl);
        return $content;
}
发布了13 篇原创文章 · 获赞 0 · 访问量 522

猜你喜欢

转载自blog.csdn.net/babdpfi/article/details/105344208