
在使用 PHP Simple HTML DOM 解析网页时,有时会遇到从开启缓存的 WordPress 网站抓取内容时出现乱码的情况。正如摘要所述,这种现象通常发生在首次抓取成功后,后续抓取返回乱码。这通常是因为服务器返回了经过 gzip 压缩的内容,而 Simple HTML DOM 库默认没有处理压缩数据的能力。
cURL 是一个强大的 PHP 库,可以用来发送 HTTP 请求。通过配置 cURL 选项,我们可以告诉服务器我们支持接收 gzip 压缩的内容,并让 cURL 自动解压缩。
以下是一个使用 cURL 解决乱码问题的示例代码:
<?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');
// 关键:设置 CURLOPT_ACCEPT_ENCODING 为空字符串,允许 cURL 自动处理压缩
curl_setopt($curl, CURLOPT_ACCEPT_ENCODING, "");
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'cURL error: ' . curl_error($curl);
exit;
}
curl_close($curl);
$html = new simple_html_dom();
$html->load($response);
echo $html;
?>代码解释:
立即学习“PHP免费学习笔记(深入)”;
注意事项:
如果服务器返回的响应头明确指示内容是 gzip 压缩的,但 cURL 没有自动解压缩,或者你不能使用 cURL,你可以手动使用 gzdecode() 函数解压缩内容。
以下是一个使用 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);
$get = file_get_contents($url, false, $context);
// 检查是否是 gzip 压缩的内容,例如检查 Content-Encoding 头部
$headers = get_headers($url);
$is_gzip = false;
foreach ($headers as $header) {
if (stripos($header, 'Content-Encoding: gzip') !== false) {
$is_gzip = true;
break;
}
}
// 如果是 gzip 压缩,则使用 gzdecode() 解压缩
if ($is_gzip && function_exists('gzdecode')) {
$get = gzdecode($get);
}
$html = new simple_html_dom();
$html->load($get);
echo $html;
?>代码解释:
立即学习“PHP免费学习笔记(深入)”;
注意事项:
当使用 PHP Simple HTML DOM 解析开启缓存的 WordPress 网站时遇到乱码问题,通常是因为服务器返回了 gzip 压缩的内容。通过使用 cURL 并设置 CURLOPT_ACCEPT_ENCODING 或使用 gzdecode() 函数,可以有效地解决这个问题。选择哪种解决方案取决于你的具体需求和环境配置。如果可以使用 cURL,建议使用 cURL 并设置 CURLOPT_ACCEPT_ENCODING,因为它更简单、更高效。如果不能使用 cURL,则可以使用 gzdecode() 函数手动解压缩内容。 无论选择哪种方法,都需要确保你的 PHP 环境已经安装并启用了相应的扩展。
以上就是PHP Simple HTML DOM 解析开启缓存的网站时出现乱码的解决方案的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号