为什么libxml_use_internal_errors(true)不尊重LIBXML_NOWARNING?

时间:2018-10-25 21:06:41

标签: php xml simplexml

我想了解libxml_use_internal_errors(true)的工作方式。它似乎不尊重LIBXML_NOWARNING标志。

这里是使用PHP 7.2.4的示例。

libxml_use_internal_errors( false );
new SimpleXMLElement(
  '<DataSet xmlns="iminvalid"></DataSet>', 
  LIBXML_NOWARNING );
var_dump(sizeof(libxml_get_errors()));
// int(0)

正如预期的那样,这些语句没有发出警告。由于LIBXML_NOWARNING,隐藏了名称空间警告。

但是,这:

libxml_use_internal_errors( true );
new SimpleXMLElement(
  '<?xml version="1.0" encoding="utf-8"?><DataSet xmlns="iminvalid"></DataSet>', 
  LIBXML_NOWARNING );
var_dump(sizeof(libxml_get_errors()));

// int(1)
// xmlns: URI iminvalid is not absolute

意外返回无效的uri警告。如何libxml_use_internal_errors( true )和隐藏xml解析警告?

1 个答案:

答案 0 :(得分:0)

从php 7.3.15开始,它似乎可以正常工作。 两个示例均未显示警告,但第二个示例确实捕获了警告。该标志不会阻止通过该功能捕获警告,而只是禁止在控制台或Web浏览器上显示警告。