使用PHPDOMDocument-> loadHTML加载html时,使用LIBXML_NOWARNING选项标志不会停止.其他常量确实有效.
在下面的示例中,我添加了LIBXML_HTML_NODEFDTD以证明已接收到常量(停止添加doctype).
$doc=new DOMDocument(); $doc->loadHTML("",LIBXML_NOERROR | LIBXML_NOWARNING | LIBXML_HTML_NODEFDTD); echo $doc->saveHTML(); Hi
但是,仍会生成警告并输出.我错过了什么?
忽略该LIBXML_NOWARNING
选项是DOMDocument::loadHTML()
PHP中的一个缺陷(并且要修复).它最近出现在一个相关问题"libxml htmlParseDocument忽略htmlParseOption标志"中,并在loadHTML*上提交为PHP Bug#74004 LIBXML_NOWARNING
标志.
但是,您可以管理自己的错误处理,直到删除缺陷为止:
libxml_use_internal_errors(true)
在打电话前设定DOMDocument::loadHTML
.这将防止错误冒泡到您的默认错误处理程序.然后,您可以使用其他libxml错误函数(例如libxml_get_errors()
)获取它们(如果您愿意).
使用此功能时,请务必清除内部错误缓冲区.如果你不这样做,并且你在长时间运行的过程中使用它,你可能会发现你的所有内存都用完了.
如果要还原默认功能集libxml_use_internal_errors()
.
代码示例:
$doc = new DOMDocument();
# clear errors list if any
libxml_clear_errors();
# use internal errors, don't spill out warnings
$previous = libxml_use_internal_errors(true);
$doc->loadHTML("Hi
");
echo $doc->saveHTML();
# clear errors list if any
libxml_clear_errors();
# restore previous behavior
libxml_use_internal_errors($previous);
这个bug现在已修复.