【问题标题】:file_get_contents failed to open chinese websitefile_get_contents 无法打开中文网站
【发布时间】:2014-03-14 09:12:49
【问题描述】:

我正在编写一个从中文网站提取 HTML 源代码的脚本。 我尝试 file_get_contents 来读取网络文件,

$html = file_get_contents($url);
echo $html; 

下面是得到的结果,

我在目标网站中发现内容类型为,

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

所以我尝试将结果转换为 utf-8,

$html = file_get_contents('http://newhouse.bt.soufun.com/house/web/Search_Result.php');
$html = mb_convert_encoding($html,'utf-8','GB2312'); 
echo $html;

现在正在显示结果,

使用上述选项,我无法获得页面的正确来源,因此无法进一步解析。我需要解析 HTML 并使用 DOM 解析器从中获取结构化数据。在这里,我收到了无法进一步解析的格式错误的 HTML 响应。

我尝试了 file_get_contents 以及 CURL。

我目前卡在这一点上,任何帮助或建议将不胜感激。 提前谢谢。

【问题讨论】:

  • 不要只假设源编码,东方国家使用各种更方便其字母的编码。 $html = mb_convert_encoding($html,'utf-8',mb_detect_encoding ($html)); 我不认为这是你的问题,看起来你正在恢复二进制内容
  • @GordonM 是的,我的问题出在二进制内容后面。

标签: php html dom curl character-encoding


【解决方案1】:

网站可能会向您返回压缩内容。所以解码它。如果需要,可以使用gzdecode 的 php。

您也可以使用 curl 获取压缩内容并自动解码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_ENCODING, "");  // handling all compressions
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
$result = curl_exec($ch);
curl_close($ch);
print $result;

【讨论】:

  • +1 用于 curl,url_fopen 只是在很多情况下都不会削减它。
  • 非常感谢...!它起作用了。但是结果显示了特殊字符,例如,�ѷ���ҳ | ��Ѷ | ···························································································································· װ� ̼Ҿ� |㵵����̳ | �������� | �ֻ��ѷ� 添加以下代码后,完美运行。 $result = mb_convert_encoding($result,'utf-8','GB2312');
  • @Surabhil 就像我对您的问题发表的评论一样,您应该使用 mb_detect_encoding 而不是仅仅假设 GB2312
  • @GordonM 感谢您的建议。 'GB2312' 是否有可能会改变。我在网站上的许多页面上看到了相同的情况。
  • 来自外部来源的数据随时都有可能发生变化。
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 2015-02-20
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多