4

我正在尝试使用 file_get_contents解析http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/ 。

但它返回非常不寻常的字符和符号。

好像我在哪里解析http://www.desi-tashan.com/它工作得很好。有人能说出为什么会这样吗?

是否涉及任何编码解码?

该页面似乎是用wordpress制作的..

4

3 回答 3

7

你看到的内容是gzipped

您可能有兴趣查看gzdecode(请注意默认情况下未启用 PHP 中的 Zlib 支持)zlib-decode

您的代码可能如下所示

$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 上的另一个解决方案,它在请求中添加 HTTP 标头告诉Accept-Encoding服务器不要 gzip。

但是,它不起作用www.desi-tashan.com,服务器忽略Accept-Encoding标头,并始终返回 gzip 压缩的内容

于 2012-09-28T07:12:00.003 回答
5

我已经看到这种情况发生在 Web 服务器配置错误的站点上,并且无论客户端是否表示它可以处理它都会发回一个压缩页面。(客户端通过Accept-Encoding标头指示这一点,file_get_contents 不会发送。)这通常适用于 Web 浏览器,因为它们要么请求默认压缩的页面,要么即使他们没有请求,也会处理 gzip 压缩的响应.

(顺便说一句,如果在 unix 派生系统上,您可以通过将其保存到文件然后在其上运行文件来轻松确认返回的内容是 gzip 压缩的。或者自己查看结果的前几个字节 - gzip 数据从 1F 8B 开始。)

我不会手动解压缩内容,而是亲自使用 PHP 的 curl 库。您可以将其配置为请求压缩后的内容,如果这样做,它将透明地为您解压缩结果:

$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 的客户端一样,此代码仍将请求并解码压缩版本。

于 2014-12-09T20:27:09.913 回答
-1

您可以简单地使用javascript charAt 方法来获取特定位置的字符串字符。或者很清楚,只需为函数提供一个文件名,它就会返回您选择的文件的扩展名。

于 2013-11-22T04:34:33.533 回答