今天在用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;
}