Signatur
Beschreibung
Mit xml_set_default_handler() wird ein Callback-Handler registriert, der für alle XML-Eingaben aufgerufen wird, die von keinem der anderen Handler (z. B. Element-, Zeichen- oder Processing-Instruction-Handler) verarbeitet werden. Dazu gehören unter anderem die XML-Deklaration (<?xml version="1.0"?>), DOCTYPE-Deklarationen sowie sonstige Daten, die nicht explizit behandelt werden.
Der Standard-Handler dient als Auffangnetz und ist nützlich, wenn man vollständige Kontrolle über alle XML-Eingaben haben möchte – etwa zum Debuggen, zur vollständigen Protokollierung oder wenn man sicherstellen möchte, dass keine Daten unbeachtet bleiben.
Der Handler-Callback erhält zwei Parameter: die XML-Parser-Instanz und den verarbeiteten Datenstück als String. Er hat keinen Rückgabewert, der die weitere Verarbeitung beeinflusst.
Hinweis: Diese Funktion gehört zur prozeduralen xml_*-API. Für objektorientierte Verwendung steht alternativ die Klasse XMLParser (ab PHP 8.0) zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $parser Pflicht | XMLParser | Die XML-Parser-Instanz, die zuvor mit xml_parser_create() oder xml_parser_create_ns() erstellt wurde. |
|
| $handler Pflicht | callable | Ein aufrufbares Callback mit der Signatur handler(XMLParser $parser, string $data): void. $data enthält den rohen XML-Text, der vom Standard-Handler verarbeitet wird. Wird ein leerer String '' oder false übergeben, wird der Handler deaktiviert. |
Rückgabewert
true bei Erfolg zurück, false wenn der übergebene $parser keine gültige XML-Parser-Instanz ist.Beispiele
Standard-Handler zum Protokollieren nicht erfasster XML-Daten
<?php
$parser = xml_parser_create();
// Element-Handler für bekannte Tags
xml_set_element_handler(
$parser,
function ($parser, $name, $attrs) {
echo "Öffnendes Tag: $name\n";
},
function ($parser, $name) {
echo "Schließendes Tag: $name\n";
}
);
// Standard-Handler fängt alles andere ab (z. B. XML-Deklaration)
xml_set_default_handler($parser, function ($parser, $data) {
$trimmed = trim($data);
if ($trimmed !== '') {
echo "Standard-Handler: " . htmlspecialchars($trimmed) . "\n";
}
});
$xml = '<?xml version="1.0" encoding="UTF-8"?><root><item>Test</item></root>';
xml_parse($parser, $xml, true);
xml_parser_free($parser);
Vollständige Erfassung aller XML-Bestandteile inkl. DOCTYPE
<?php
$parser = xml_parser_create();
$log = [];
xml_set_default_handler($parser, function ($parser, $data) use (&$log) {
$log[] = $data;
});
$xml = '<?xml version="1.0"?><!DOCTYPE note SYSTEM "note.dtd"><note><body>Hallo</body></note>';
xml_parse($parser, $xml, true);
xml_parser_free($parser);
echo "Erfasste Standard-Handler-Daten:\n";
foreach ($log as $entry) {
echo ' ' . htmlspecialchars(trim($entry)) . "\n";
}
// Wichtig · Fallstricke
Zeichenkodierung: Die an den Handler übergebenen Daten werden in der Kodierung geliefert, die der Parser intern verwendet (standardmäßig UTF-8). Bei Verwendung von xml_parser_create() mit einer abweichenden Kodierung (z. B. ISO-8859-1) sollte dies berücksichtigt werden.
Case-Folding: Anders als bei Element- oder Attribut-Namen hat das Case-Folding (Umwandlung in Großbuchstaben) keinen Einfluss auf die Daten im Standard-Handler – der Rohtext wird unverändert übergeben.
Deaktivierung: Der Handler kann deaktiviert werden, indem als $handler ein leerer String '' oder false übergeben wird.