我正在尝试使用file_get_contents解析http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/。
但它会返回非常不寻常的字符和符号。
就好像我解析http://www.desi-tashan.com/一样,它很有效。有人能告诉为什么会这样吗?
是否涉及编码解码?
该页面似乎是用wordpress制作的。
答案 0 :(得分:7)
您看到的内容是gzipped
您可能有兴趣查看gzdecode
或zlib-decode
(请注意,默认情况下不启用PHP中的Zlib支持)
您的代码可能如下所示
$url = 'http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/';
$content = file_get_contents($url);
$decoded_content = gzdecode($content); // or zlib_decode($content);
stackoverflow上的另一个解决方案here,它在请求中添加了HTTP标头Accept-Encoding
,告诉服务器不要gzip。
但是,它不适用于www.desi-tashan.com
,服务器忽略Accept-Encoding
标头,并始终返回gzip压缩内容
答案 1 :(得分:5)
我已经看到这种情况发生在Web服务器配置错误的网站上,并发回一个压缩页面,无论客户端是否表明它可以应对。 (客户端用Accept-Encoding
标题表示这一点,file_get_contents不会发送。)这通常适用于Web浏览器,因为它们要么默认压缩页面,要么处理gzipped响应,即使他们没有要求一个。
(顺便说一句,如果在unix派生系统上,你可以通过将其保存到文件然后在其上运行file来轻松确认返回的内容是gzip压缩。或者只是查看前几个字节结果你自己的gzip数据从1F 8B开始。)
我不是手动解压缩内容,而是亲自使用PHP的curl库。你可以配置它来请求内容gzip,如果你这样做,它将透明地解压缩你的结果:
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://actualidad.rt.com/actualidad');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_ENCODING , 'gzip');
$content = curl_exec ($ch);
这比手动解码结果更具有前瞻性,就好像将来正确配置Web服务器以将纯文本发送回无法处理gzip的客户端一样,此代码仍会请求和解码压缩版本。
答案 2 :(得分:-1)
您只需使用javascript charAt method即可获取特定位置的字符串字符。 要么 非常清楚,只需使用文件名输入函数,它将返回您选择的文件的扩展名。