在使用 PHPDOMDocument->loadHTML 加载 html 时,使用 LIBXML_NOWARNING 选项标志不会停止 wanrings。其他常量确实有效。
在下面的示例中,我添加了 LIBXML_HTML_NODEFDTD 以证明常量已收到(停止添加文档类型)。
$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);
更新
关于PHP LIBXML_NOWARNING 不抑制警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41844778/