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;
当我尝试使用 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;