
本文旨在解决在使用 PHP Simple HTML DOM 解析启用缓存的 WordPress 网站时,遇到的返回乱码问题。通常,首次抓取正常,但后续抓取会返回乱码。通过使用 cURL 并设置 CURLOPT_ACCEPT_ENCODING 或使用 gzdecode() 函数,可以有效解决此问题,确保正确解析网站内容。
在使用 PHP Simple HTML DOM 解析网页时,特别是针对启用了缓存机制(例如 WordPress 网站的缓存插件)的网站,可能会遇到返回乱码的情况。 这种现象通常表现为第一次抓取能够正常获取网页内容,而后续的抓取则返回乱码。 这主要是因为缓存机制可能返回压缩后的内容,而 Simple HTML DOM 无法自动处理这种压缩。
以下提供两种解决方案:
方案一:使用 cURL 并设置 CURLOPT_ACCEPT_ENCODING
立即学习“PHP免费学习笔记(深入)”;
cURL 是一个强大的数据传输工具,通过设置 CURLOPT_ACCEPT_ENCODING 选项,可以告知服务器客户端能够处理的压缩类型,并自动解压缩接收到的数据。
<?php
include('/simple_html_dom.php');
$url = "https://www.2311666.com.tw/";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'Chrome/94.0.4606.81'); // 设置 User-Agent
curl_setopt($curl, CURLOPT_ACCEPT_ENCODING, ""); // 允许接受所有编码类型
$html_content = curl_exec($curl);
curl_close($curl);
$html = new simple_html_dom();
$html->load($html_content);
echo $html;
?>代码解释:
方案二:使用 gzdecode() 函数
如果服务器返回的是 gzip 压缩的数据,但 cURL 无法自动解压缩,可以使用 gzdecode() 函数手动解压缩。
<?php
include('/simple_html_dom.php');
$url = "https://www.2311666.com.tw/";
$opts = array(
'http'=> array('header'=>"User-Agent:Chrome/94.0.4606.81\r\n"));
$context = stream_context_create($opts);
$html_content = file_get_contents($url,false,$context);
// 检查是否是 gzip 压缩的数据
if (substr($html_content, 0, 2) == "\x1f\x8b") {
$html_content = gzdecode($html_content);
}
$html = new simple_html_dom();
$html->load($html_content);
echo $html;
?>代码解释:
注意事项:
总结:
当使用 PHP Simple HTML DOM 解析启用缓存的网站返回乱码时,通常是由于缓存机制返回了压缩后的数据,而 Simple HTML DOM 无法自动处理。 通过使用 cURL 并设置 CURLOPT_ACCEPT_ENCODING 选项,或者使用 gzdecode() 函数手动解压缩,可以有效解决此问题,确保能够正确解析网站内容。 在实际应用中,应根据具体情况选择合适的解决方案,并注意处理可能出现的其他问题,例如 User-Agent 设置、反爬虫机制等。
以上就是PHP Simple HTML DOM 解析启用缓存的网站返回乱码问题的解决方案的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号