PHP中DOMDocument::loadHTML()方法返回1的原因是什么
$tag = <some html tag>; $a = new DOMDocument(); $a->loadHTML($tag);
loadHTML()返回1的核心原因
PHP是弱类型语言,DOMDocument::loadHTML()方法的返回值本身是布尔类型:
- 只要HTML没有到完全无法解析的程度,方法就会返回布尔值
true,当你用打印、松散判断的方式读取这个返回值时,true会被自动转换为1 - 只有解析遇到完全无法处理的致命错误时,才会返回布尔值
false,对应输出为0
你传入的哪怕是不完整的HTML片段(比如单个标签、缺根节点的内容),底层依赖的libxml库会自动补全缺失的文档结构来完成解析,整个过程没有触发致命错误,所以返回值是true,表现出来就是你看到的1。
哪怕HTML有语法不规范、标签未闭合这类问题,这个方法也只会抛出解析警告,不会返回false。如果你需要感知解析过程中的非致命问题,可以用libxml内置的错误捕获能力处理:
// 关闭默认的错误直接输出,改为手动获取错误 libxml_use_internal_errors(true); $tag = '<p>测试片段'; $dom = new DOMDocument(); $parseResult = $dom->loadHTML($tag); $parseErrors = libxml_get_errors(); // 拿到所有解析警告、错误 libxml_clear_errors(); var_dump($parseResult); // 只要不是完全解析失败,这里永远是bool(true)
如果你只是解析HTML片段,不想让libxml自动补全<!DOCTYPE>、<html>、<body>这类冗余标签,可以在调用方法时传入对应配置常量:
$dom->loadHTML($tag, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
内容的提问来源于stack exchange,提问作者arar
相关产品推荐
相关产品推荐

