PHP LIBXML_NOWARNING 不抑制警告?

标签 php libxml2

在使用 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*

但是,您可以管理自己的错误处理,直到错误被修复:

  1. 在调用 libxml_use_internal_errors(true) 之前设置 DOMDocument::loadHTML 。这将防止错误冒泡到您的默认错误处理程序。然后您可以使用其他 libxml 错误函数(例如 libxml_get_errors() )获取它们(如果您愿意)。
  2. 确保在使用上述功能时清除内部错误缓冲区。如果您不这样做,并且在长时间运行的过程中使用它,您可能会发现所有内存都已用完。
  3. 如果要恢复默认功能集 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);

更新

This bug is fixed now .

关于PHP LIBXML_NOWARNING 不抑制警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41844778/

相关文章:

ruby - 为什么 Nokogiri 的 to_xhtml 从 `id` 创建新的 `name` 属性?

c - 如何在 libxml2 中添加由字符串构造的 xml 节点

xml - 将新节点添加到一组现有节点 (Perl XML::LibXML)

php - For循环不返回所有值

php - 从php中的2个不同表获取信息时查询错误

php - 正则表达式取代 reg 商标

c++ - valgrind 在使用 libxml2 时向我显示泄漏

我可以使用 xmlzipio 通过 xmlReadMemory 从内存中读取 xml 吗?

php - Symfony Doctrine - 使用外键字段从相关表中检索记录

php - 从 txt 文件中的字符串中删除行