PHP: 禁止 DomDocument::loadHTML() 对不规范的HTML输出警告信息
很久之前都有注意到这个问题,没去处理。但最近服务器频繁被攻击,错误信息太多,于是想到把这玩意儿干掉。
以前总是使用如下的方式加载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);