PHP: 禁止 DomDocument::loadHTML() 对不规范的HTML输出警告信息

陪她去流浪 桃子 2015年04月23日 阅读次数:4431

很久之前都有注意到这个问题,没去处理。但最近服务器频繁被攻击,错误信息太多,于是想到把这玩意儿干掉。

以前总是使用如下的方式加载HTML:

$doc = new DOMDocument();
$doc->loadHTML('<?xml version="1.0" encoding="UTF-8" ?>' . $html);

但对于不是特别规范的HTML文档,总是有太多的警告信息,太烦:

PHP message: PHP Warning:  DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 3 in index.php on line 33

解决办法

DomDocument 这个类是调用 libxml 来解析HTML的,所以在libxml中设置临时不输出错误或警告即可:

// modify state
$libxml_previous_state = libxml_use_internal_errors(true);
// parse
$dom->loadHTML($html);
// handle errors
libxml_clear_errors();
// restore
libxml_use_internal_errors($libxml_previous_state);

参考

这篇文章的内容已被作者标记为“过时”/“需要更新”/“不具参考意义”。

标签:php · HTML