DOMDocument可解析HTML字符串或文件,结合DOMXPath提取元素,需处理编码避免乱码。1.用loadHTML()加载字符串并禁用隐式标签;2.用loadHTMLFile()读取本地文件或file_get_contents()获取远程内容;3.DOMPXPath支持CSS选择器式查询,如按class或id提取节点;4.中文乱码可通过mb_convert_encoding或添加meta charset解决。

在PHP中读取和解析HTML内容,DOMDocument 是一个非常实用的内置类。它能将HTML字符串或文件加载为结构化的文档对象模型(DOM),便于遍历、修改和提取所需数据。
如果已有HTML内容(如从网络请求获取的页面源码),可以直接用 loadHTML() 方法加载:
$html = '<div class="content"><p>这是第一段</p><p>这是第二段</p></div>';
$dom = new DOMDocument();
// 加载HTML,禁用内部错误避免警告
libxml_use_internal_errors(true);
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();
// 获取所有 p 标签
$paragraphs = $dom->getElementsByTagName('p');
foreach ($paragraphs as $p) {
echo $p->nodeValue . "\n"; // 输出:这是第一段 这是第二段
}
注意:使用 LIBXML_HTML_NOIMPLIED 和 LIBXML_HTML_NODEFDTD 可防止自动添加 html、body 等隐式标签,保持原始结构。
若需解析本地保存的HTML文件,可用 loadHTMLFile() 方法:
立即学习“PHP免费学习笔记(深入)”;
$dom = new DOMDocument();
libxml_use_internal_errors(true);
if ($dom->loadHTMLFile('example.html')) {
$titles = $dom->getElementsByTagName('h1');
foreach ($titles as $title) {
echo $title->nodeValue . "\n";
}
} else {
echo "无法加载文件";
}
对于远程URL,建议先用 file_get_contents() 获取内容再加载:
$url = 'https://example.com/page.html'; $html = file_get_contents($url); $dom = new DOMDocument(); libxml_use_internal_errors(true); $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
DOMDocument 本身不支持CSS选择器,但可结合 DOMXPath 实现灵活查询:
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED);
$xpath = new DOMXPath($dom);
// 查找 class="content" 的元素
$nodes = $xpath->query('//div[@class="content"]');
foreach ($nodes as $node) {
echo $node->textContent;
}
// 查找 id="main"
$main = $xpath->query('//[@id="main"]')->item(0);
if ($main) {
echo $main->nodeValue;
}
若HTML含中文出现乱码,确保在加载前声明编码:
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED);
或在HTML开头添加编码声明:
$html = '<!DOCTYPE html><meta charset="UTF-8">' . $html;
以上就是php如何阅读html_PHP中读取/解析HTML内容(DOMDocument)方法的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号