PHP Conference Japan 2024

xml_set_default_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_default_handler設定預設處理器

說明

xml_set_default_handler(XMLParser $parser, callable|string|null $handler): true

設定 XML 解析器 parser 的預設處理函式。

參數

parser

XML 解析器。

handler

如果傳入 null,處理器將會重置為預設狀態。

警告

空字串也會重置處理器,但自 PHP 8.4.0 起已棄用。

如果 handler 是一個 可呼叫 的值,則該可呼叫值將被設定為處理器。

如果 handler 是一個 字串,它可以是使用 xml_set_object() 設定的物件之方法名稱。

警告

自 PHP 8.4.0 起已棄用。

警告

從 PHP 8.4.0 開始,會在設定處理器時檢查可呼叫值是否有效,而不是在呼叫它時檢查。這表示必須在將方法字串設定為回呼之前呼叫 xml_set_object()。然而,由於此行為也從 PHP 8.4.0 開始棄用,建議改用適當的 可呼叫 值作為方法。

處理器的簽章必須為

handler(XMLParser $parser, string $data): void
parser
呼叫處理器的 XML 解析器。
資料
data 包含字元資料。這可能是 XML 宣告、文件類型宣告、實體或其他沒有其他處理器的資料。

回傳值

永遠回傳 true

更新日誌

版本 說明
8.4.0 將非 可呼叫字串 傳遞給 handler 現在已被棄用,請使用方法的正確可呼叫值,或使用 null 來重置處理器。
8.4.0 現在會在設定處理器時檢查 handler 作為 可呼叫 值的有效性,而不是在呼叫它時檢查。
8.0.0 parser 現在需要 XMLParser 實例;先前需要有效的 xml 資源
新增註釋

使用者貢獻的註釋 3 則註釋

jp dot amarok at email dot cz
7 個月前
對於想知道這個函式實際處理哪些事件的人來說

它用於發現 XML 註釋或其他宣告(例如 xml-stylesheet)的情況。在這種情況下,data 參數包含整個字串,例如

<!-- 這是註釋 -->
<?xml-stylesheet title="mystyle" type="text/xsl" href="style.xsl" ?>
phillip
19 年前
在我看來,在 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() { ... }
函式 parseDEFAULT() { ... }

在 PHP5 下,parseDEFAULT 不會接收到任何字元數據,但在 PHP4 下會。至少這是我在遷移到 PHP5 後發生的奇怪事情(沒有發生)的看法。

我的解決方案是新增 xml_set_character_data_handler($parser, 'parseDEFAULT')。這對我有用。
anoril at anoril dot com
18 年前
我在兩個 PHP5 安裝版本中遇到相同的問題:一個接受使用預設處理器,而另一個只使用 character_data 處理器。

也許是設定問題……

;) Nonor.
To Top