使用PHPDOMDocument-> loadHTML加载html时,使用LIBXML_NOWARNING选项标志不会停止。其他常量确实有效。
在下面的示例中,我添加了LIBXML_HTML_NODEFDTD以证明已接收到常量(停止添加doctype)。
$doc=new DOMDocument();
$doc->loadHTML("<tagthatdoesnotexist><h1>Hi</h1></tagthatdoesnotexist>",LIBXML_NOERROR | LIBXML_NOWARNING | LIBXML_HTML_NODEFDTD);
echo $doc->saveHTML();
但是,仍会生成警告并输出。我错过了什么?
使用LIBXML_NOWARNING
option忽略DOMDocument::loadHTML()
是PHP中的缺陷(并且需要修复)。它最近在related question "libxml htmlParseDocument ignoring htmlParseOption flags"长大,并作为PHP Bug #74004 LIBXML_NOWARNING
flag ingnored on loadHTML*提交。
但是,您可以管理自己的错误处理,直到删除缺陷为止:
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("<tagthatdoesnotexist><h1>Hi</h1></tagthatdoesnotexist>");
echo $doc->saveHTML();
# clear errors list if any
libxml_clear_errors();
# restore previous behavior
libxml_use_internal_errors($previous);