file_get_contents返回特定网址的不可读文本

mor*_*Tie 1 php rss file-get-contents

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

$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;
Run Code Online (Sandbox Code Playgroud)

我很好奇他们是如何做的以及我能做些什么来克服这个问题.

不可读文本的一部分:

<ي]يřم6-öپي©™ت,A7 {»AGW&يؤé;éN¹\ S'HK \S¤-¤l+ے÷ùI"(إژzA5ةض;غ%K4 {qtqy½ùو一个^»¬nھ|ûٹ发Eه¤Ĵřصڈ1个Q ^}sü§7uس升دزؤŸ¾²Ÿف武•يغWGG·我س&M>,"J〜$ےžؤ(ZIج'²جٹم÷|حغ?!";گ'Ÿس¢ï³【Tر5ز³SGYٹ.ں@

实际上,每当我打开链接时,都会出现一些不同的不可读文本.

Ram*_*der 5

正如我在评论中提到的 - 返回的内容是gzip编码的,因此您需要取消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;     
Run Code Online (Sandbox Code Playgroud)