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

时间:2016-02-12 16:44:55

标签: php rss file-get-contents

当我尝试使用php file_get_contents函数读取kat.cr的rss源时,我得到一些不可读的文本,但是当我用浏览器打开它时,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;

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

不可读文字的一部分:

  

<ي]يrم6-?Oپي©™Ê,à7{»â€¢&amp;يؤe;éN¹\ S'HK \S¤-¤l+ے÷ùI“(إژzA5ةض;غ%K4 {qtqy½ùوa ^»¬nھ |ûٹSeه¤Jrصڈ1 q ^}sü§7uسlدزؤY¾²yفVu•يغWGG·Iس&amp; m&gt;,“j~ $ےzؤ(?zïج'²جٹم?!÷|حغ”;گ'Yس¢ï³{tر5Ò³sgYٹ.ں@

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

1 个答案:

答案 0 :(得分: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; ,但我没有,但此处的功能可以解决这个问题。

        Process xlP = Process.Start("excel.exe");
        int id = xlP.Id;
        int hwnd = (int)Process.GetCurrentProcess().MainWindowHandle;

        Excel.Application oExcelApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");

        if(xlP.MainWindowTitle.Contains( oExcelApp.ActiveWorkbook.Name)   )
        {
            //Proceed further
        }