file_get_contents returns 无法读取特定 url 的文本

file_get_contents returns unreadable text for a specific url

当我尝试使用 php file_get_contents 函数读取 kat.cr 的 rss 提要时,我得到了一些不可读的文本,但是当我用浏览器打开它时,提要是美好的。
我试过许多其他主机,但没有机会获得正确的数据。
我什至尝试将用户代理设置为不同的浏览器,但仍然没有任何变化。
这是我试过的简单代码:

$options  = array('http' => array('user_agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'));
$url = 'https://kat.cr/movies/?rss=1';
$data = file_get_contents($url, FILE_TEXT, stream_context_create($options));
echo $data;

我很好奇他们是怎么做到的,我能做些什么来克服这个问题。

部分文字不可读:

‹ي]يrم6–‎?Oپي©™ت,à7{»‌âgw&يؤe;éN¹\S´HK\S¤–¤l+ے÷ِùِIِ”(إژzA5‌ةض؛غ%K4ـ{qtqy½ùوa^ »¬nٍھ|ûٹSِ eه¤Jَrِْصڈ1q^}sü§7uسlدزؤYً¾²yفVu‌•يغWGG·Iس&m>،“j~$ےzؤ(?zï‍ج’²جٹم?!ّ÷¦حغ";‏گ´Yس¢ï³{tر5ز ³َsgYٹْ.ں@

实际上每次我打开 link 时都会出现一些不同的不可读文本。

正如我在评论中提到的 - 返回的内容是 gzip 编码的,因此您需要解压缩数据。根据您的 php 版本,您可能安装或未安装 gzdecode,我没有,但这里的功能可以解决问题。

if( !function_exists('gzdecode') ){
    function gzdecode( $data ){ 
        $g=tempnam('/tmp','ff'); 
        @file_put_contents( $g, $data );
        ob_start();
        readgzfile($g);
        $d=ob_get_clean();
        unlink($g);
        return $d;
    }   
}
$data=gzdecode( file_get_contents( $url ) );
echo $data;