xml_parser_get_option () wird verwendet, um die Einstellungen für einen bestimmten XML -Parser abzurufen. Der Funktionsprototyp lautet wie folgt:
mixed xml_parser_get_option(resource $parser, int $option)
wobei $ parser eine Parser -Ressource ist, die von XML_PARSER_CREATE () oder zugehörigen Funktionen erstellt wurde, und $ ist die Option der Optionskonstante , die Sie erhalten möchten, wie z .
Wenn das Einstellungselement vorhanden ist, gibt die Funktion ihren aktuellen Wert zurück. Ansonsten kehrt es falsch zurück.
Für die Codierung sind die am häufigsten verwendeten Optionen:
XML_OPTION_TARGET_ENCODING
Diese Option stellt die Zielcodierung der Parserausgabe dar, die bestimmt, wie der Parser interne Zeichen konvertiert, die als in PHP verfügbare Zeichenfolgen dargestellt werden. Der Standardwert lautet "UTF-8" oder "ISO-8859-1" oder "US-ASCII" .
xml_parser_get_option () gibt die Zielcodierung zurück, dh die Codierung des Parser -Ausgangsergebnisses und nicht die Codierung der ursprünglichen XML -Datei. Die Codierung der ursprünglichen XML -Datei wird beispielsweise durch die XML -Deklaration bestimmt:
<?xml version="1.0" encoding="ISO-8859-1"?>
Auch wenn die XML-Deklaration ISO-8859-1 lautet, gibt XML_PARSER_GET_OPTION () "UTF-8" zurück, solange Sie die Parser-Einstellungen nicht manuell ändern, da PHP den Quellinhalt automatisch in die Zielcodierung konvertiert.
Wenn Sie vorhaben, die Standardzielcodierung zu ändern, können Sie XML_PARSER_SET_OPTION () verwenden:
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
Verwenden Sie dann xml_parser_get_option (), um zu überprüfen, ob die Einstellung erfolgreich ist:
$encoding = xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING);
echo "Aktuelle Codierung:$encoding";
Bitte beachten Sie, dass eine willkürliche Codierung nicht unterstützt wird. Wenn Sie eine nicht unterstützte Codierung festlegen, wird der Parser fehlgeschlagen.
Wenn die Leser-XML-Datei selbst einen Zeichensatz verwendet, der mit der Zielcodierung nicht übereinstimmt und Nicht-ASCII-Zeichen enthält, kann der PHP-Parser einen Fehler werfen, da die Zeichen nicht zugeordnet werden können. Daher ist es sehr kritisch sicherzustellen, dass die tatsächliche Codierung der Quelldatei mit der Deklaration übereinstimmt und mit der Zielcodierung kompatibel ist.
Die ursprüngliche Codierung der Datei kann über MB_DETECT_ENCODING () erkannt werden und bei Bedarf mb_convert_encoding () verwendet werden, um sie in die Zielcodierung umzuwandeln:
$xml = file_get_contents("https://gitbox.net/data/sample.xml");
$xml = mb_convert_encoding($xml, "UTF-8", "auto");
$parser = xml_parser_create("UTF-8");
xml_parse($parser, $xml, true);
Jede Parser -Instanz ist unabhängig. Stellen Sie beim Erhalten von Einstellungen sicher, dass Sie die richtige Parser -Ressource übergeben. Dies ist besonders wichtig, wenn Sie gleichzeitig mit mehreren XML -Dateien arbeiten oder die Parser -Logik in einer Klasse zusammenfassen.
xml_parser_get_option () gehört zur Expat-Parser-Schnittstelle und nicht zur libxML-basierten DOM oder Simplexml und kann daher nicht für diese Erweiterungen verwendet werden. Es funktioniert nur mit Parserstil -Parern im SAX -Stil, das mit XML_PARSER_CREATE () erstellt wurde.