Bei der Verarbeitung von XML-Daten mit PHPs simplexml_load_string kann es zu Codierungsinkompatibilitäten kommen. Obwohl behauptet wird, in UTF-8 zu vorliegen, kann der XML-Inhalt nicht codierte Zeichen enthalten, was zu der Fehlermeldung „Eingabe ist nicht korrekt UTF-8“ führt.
Normalerweise Dieses Problem tritt auf, weil der XML-Inhalt in ISO-8859-1 statt in UTF-8 codiert ist. Die beste Lösung besteht darin, den Datenanbieter zu kontaktieren und ihn zu bitten, die Kodierung zu korrigieren.
Wenn es jedoch nicht möglich ist, die Quelle zu ändern, gibt es Vorverarbeitungstechniken um das Problem zu entschärfen:
1. Kodierungserkennung:
Um die korrekte Kodierung einer XML-Datei zu erkennen, können Sie die PHP-Funktion mb_detect_encoding verwenden. Diese Funktion versucht, die Kodierung basierend auf statistischen Techniken zu bestimmen.
2. Konvertierung von ISO-8859-1 nach UTF-8:
Wenn die erkannte Kodierung ISO-8859-1 ist, können Sie den XML-Inhalt mit den PHP-Funktionen iconv oder mb_convert_encoding in UTF-8 konvertieren.
<code class="php">$utf8_content = iconv('ISO-8859-1', 'UTF-8', $latin1_content);</code>
3. Teilweise Korrektur:
Der folgende Code kann einige Nicht-UTF-8-Sequenzen im XML-Inhalt teilweise reparieren, indem er sie durch ihre UTF-8-Äquivalente ersetzt:
<code class="php">function fix_latin1_mangled_with_utf8_maybe_hopefully_most_of_the_time($str) { return preg_replace_callback('#[\xA1-\xFF](?![\x80-\xBF]{2,})#', 'utf8_encode_callback', $str); }</code>
4. Manuelle Validierung und Reparatur:
Dies ist ein komplexerer und zeitaufwändigerer Ansatz, erfordert jedoch die manuelle Validierung und Reparatur ungültiger UTF-8-Sequenzen im XML-Inhalt.
Unabhängig von der verwendeten Vorverarbeitungsmethode ist es wichtig, den Datenanbieter über das Codierungsproblem zu informieren, damit er es an der Quelle beheben kann. Dadurch wird sichergestellt, dass zukünftige Daten im richtigen UTF-8-Format geliefert werden.
Das obige ist der detaillierte Inhalt vonWie behebe ich Inkompatibilitäten bei der XML-Kodierung mit SimpleXML von PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!