对于任何也在想知道这个函数实际处理什么事件的人
它用于在找到 XML 注释或附加声明(如 xml-stylesheet)时。在这种情况下,data 参数包含完整的字符串,例如
<!-- this is a comment -->
<?xml-stylesheet title="mystyle" type="text/xsl" href="style.xsl" ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
xml_set_default_handler — 设置默认处理器
为 XML 解析器 parser
设置默认处理器函数。
parser
XML 解析器。
handler
如果传递了null
,则处理器将重置为其默认状态。
空字符串也会重置处理器,但是从 PHP 8.4.0 开始已弃用。
如果 handler
是一个 callable,则该可调用对象将被设置为处理器。
如果 handler
是一个 string,它可以是用 xml_set_object() 设置的对象的方法名称。
从 PHP 8.4.0 开始已弃用。
从 PHP 8.4.0 开始,可调用对象在设置处理器时将被检查其有效性,而不是在调用时检查。这意味着必须在将方法字符串设置为回调之前调用 xml_set_object()。但是,由于此行为从 PHP 8.4.0 开始也已弃用,因此建议改为使用正确的 callable 来表示方法。
处理器的签名必须是
parser
data
data
包含字符数据。这可能是 XML 声明、文档类型声明、实体或其他不存在其他处理器的其他数据。
始终返回 true
。
对于任何也在想知道这个函数实际处理什么事件的人
它用于在找到 XML 注释或附加声明(如 xml-stylesheet)时。在这种情况下,data 参数包含完整的字符串,例如
<!-- this is a comment -->
<?xml-stylesheet title="mystyle" type="text/xsl" href="style.xsl" ?>
在我看来,在 PHP5 中,定义为默认处理程序(使用 xml_set_default_handler())的函数不再传递 cdata 了
例如
xml_set_element_handler($this->parser, 'parseSTART', 'parseEND');
xml_set_default_handler($this->parser, 'parseDEFAULT');
function parseSTART() { ... }
function parseEND() { ... }
function parseDEFAULT() { ... }
在 PHP5 下,parseDEFAULT 将不会传递任何 cdata,但在 PHP4 下会。至少这是我对迁移到 PHP5 后(未)发生奇怪情况的看法。
我的解决方案是添加 xml_set_character_data_handler($parser, 'parseDEFAULT')。这对我有用。
我在两个 PHP5 安装中遇到了同样的问题:一个接受使用默认处理器,而另一个只使用 character_data 处理器。
也许是配置问题……
;) Nonor。