Charakter -Set -Probleme sind eine der häufigsten Fallstricke, wenn die Funktion XML_Parse verwendet wird, um XML -Daten in PHP zu verarbeiten. Insbesondere in dem Szenario, in dem Daten über Systeme und Sprachen ausgetauscht werden, kann die Codierungsmethode von XML -Dateien mit dem tatsächlichen Inhalt nicht übereinstimmen oder mit der PHP -Umgebung nicht kompatibel ist, was zu einem analysierenden Ausfall führt. Dieser Artikel erklärt ausführlich die Ursachen, häufige Symptome von Problemen mit Charaktern und entsprechende Lösungen und Reparaturmethoden.
Die Codierung in der XML -Erklärung steht im Widerspruch zum tatsächlichen Inhalt nicht
<?xml version="1.0" encoding="UTF-8"?>
Diese Deklarationszeile bedeutet, dass XML mit UTF-8 codiert wird, aber obwohl einige Dateien als UTF-8 gekennzeichnet sind, ist der tatsächliche Inhalt GBK, ISO-8859-1 und andere Codierungen.
PHP -Standardzeichensatz ist nicht mit XML vereinbar
Wenn Ihr PHP-Skript standardmäßig Zeichenfolgen in UTF-8 verarbeitet, die XML-Datei jedoch in anderen Codierungen geschrieben ist, kann XML_Parse einen Fehler haben.
Die korrekte Codierungskonvertierungslogik ist nicht festgelegt
Die Funktion xml_parse selbst unterstützt keine automatische Konvertierung für den Zeichensatz. Wenn der eingehende XML-Inhalt nicht UTF-8 ist, fällt die Analyse fehl und fordert illegale Charaktere auf.
XML-Fehler: Nicht gut geformt (ungültiges Token)
XML -Fehler: Ungültiges Zeichen
Diese Fehler bedeuten oft, dass der von Ihnen angegebene XML-Zeichenstrom nicht im UTF-8-Format oder illegale Zeichen enthält, die nicht analysiert werden können.
Vor der Parsen ist die Transkodierung von XML-Saiten auf UTF-8 der häufigste und sicherste Weg. PHP kann mit mb_convert_encoding oder iconv implementiert werden.
$xml_content = file_get_contents("https://m66.net/data/sample.xml");
// Angenommen, die ursprüngliche Codierung ist GBK,Verschiedene Kodierungen können gemäß den tatsächlichen Bedingungen ausprobiert werden
$xml_content_utf8 = mb_convert_encoding($xml_content, 'UTF-8', 'GBK');
$xml_parser = xml_parser_create('UTF-8');
xml_parse($xml_parser, $xml_content_utf8, true);
xml_parser_free($xml_parser);
Hinweis: Sie müssen wissen, welche Codierung im Original XML geschrieben ist. Das Erraten der falschen Kodierung wird das Problem noch schlimmer machen.
Wenn Sie bereits wissen, dass der ursprüngliche Inhalt UTF-8 ist, die Erklärung jedoch falsch ist, können Sie regelmäßige Änderungen verwenden:
$xml_content = file_get_contents("https://m66.net/data/sample.xml");
// ersetzen XML Der Codierungsteil in der Aussage
$xml_content = preg_replace('/<\?xml(.*?)encoding=["\'][^"\']*["\'](.*?)\?>/i', '<?xml\1encoding="UTF-8"\2?>', $xml_content);
// Weiter analysieren
$xml_parser = xml_parser_create('UTF-8');
xml_parse($xml_parser, $xml_content, true);
xml_parser_free($xml_parser);
Wenn das SAX -Schema -Parsing nicht besonders erforderlich ist ( XML_PARSE gehört zu diesem Muster), können Sie in Betracht ziehen, die Simplexml verwenden, was bei der Umgang mit Codierung toleranter ist:
$xml_content = file_get_contents("https://m66.net/data/sample.xml");
// Konvertieren zu UTF-8
$xml_content_utf8 = mb_convert_encoding($xml_content, 'UTF-8', 'GB2312');
$xml = simplexml_load_string($xml_content_utf8);
print_r($xml);
Unified UTF-8-Codierungsverarbeitungsdaten
Stellen Sie beim Speicher eine Codierungskonsistenz sicher
Überprüfen Sie für externe XML -Dateien ihre Codierung vor dem Lesen
Fehlerprotokolle sind während der Entwicklung aktiv
Obwohl das Charakter -Set -Problem schwierig erscheinen mag, ist es nicht schwer zu lösen, solange Sie die Ursache verstehen. Bei der Verwendung von XML_Parse geht es darum, sicherzustellen, dass das Einkommen eine legitime UTF-8-Zeichenfolge ist und bei Bedarf XML-Deklarationen manuell transkodiert oder korrekt transkodiert oder korrigiert werden. Ich hoffe, dieser Artikel hilft Ihnen bei der Behandlung von PHP- und XML -Integrationsproblemen reibungsloser.