Aktueller Standort: Startseite> Neueste Artikel> Wie löst ich das Problem des Parsensfehlers, wenn simpexml_load_string illegale Zeichen begegnet?

Wie löst ich das Problem des Parsensfehlers, wenn simpexml_load_string illegale Zeichen begegnet?

gitbox 2025-06-11

Bei der Parsen von XML -Zeichenfolgen mithilfe von PHPs simplexml_load_string -Funktion stoßen Sie häufig auf das Problem von "illegalen Zeichen", wodurch das Parsing -Fehler verursacht wird. Diese Art von Fehler beruht normalerweise auf das Vorhandensein von Zeichen in XML -Zeichenfolgen, die nicht den XML -Spezifikationen entsprechen, z. B. Kontrollzeichen, unabgeordnete spezielle Symbole oder inkonsistente Codierungsformate. Dieser Artikel enthält eine detaillierte Erläuterung, was das Problem verursacht und Lösungen und Beispielcode bereitstellt.


1. Problemanalyse

Simplexml_Load_String ist eine einfache Funktion, die von PHP verwendet wird, um XML -Zeichenfolgen zu analysieren. Wenn eine XML -Zeichenfolge illegale Zeichen enthält, gibt die Funktion false zurück und eine Fehlermeldung wird ausgelöst. Illegale Charaktere enthalten im Allgemeinen:

  • ASCII -Steuerzeichen (z.

  • Zeichen, die nicht richtig entkommen sind (zum Beispiel und nicht als & amp; )

  • Die XML -Deklaration oder die Inhaltscodierung stimmt nicht mit der tatsächlichen Codierung überein

  • Nicht-UTF-8-Codierung, aber nicht deklariert

Diese Zeichen lassen den XML -Parser die String -Struktur nicht korrekt verstehen, was zu einem Fehler führt.


2. Gemeinsame Lösungen

1. Illegale Kontrollfiguren aufräumen

Steuerzeichen können durch reguläre Ausdrücke entfernt werden:

 <?php
$xmlString = 'Dies enthält illegale CharaktereXMLSaite';

// Steuerzeichen löschen,Halten Sie die Linienpause(\n)、Eingeben(\r)、Tab -Symbole(\t)
$cleanXmlString = preg_replace('/[^\PC\s]/u', '', $xmlString);

$xml = simplexml_load_string($cleanXmlString);
if ($xml === false) {
    echo "Analyse fehlgeschlagen\n";
} else {
    print_r($xml);
}
?>

2. Es entkommen Sonderzeichen

Wenn der XML -Inhalt unabgeordnete Symbole wie & , < , > usw. enthält, müssen Sie zuerst entkommen:

 <?php
$xmlString = 'Dies enthält unabgeordnet&Symbol vonXMLSaite';

$xmlString = str_replace('&', '&amp;', $xmlString);

$xml = simplexml_load_string($xmlString);
if ($xml === false) {
    echo "Analyse fehlgeschlagen\n";
} else {
    print_r($xml);
}
?>

HINWEIS: Wenn es sich bereits um legale XML handelt, kann das Ersetzen von Fehlern verursacht werden und sollte für die spezifische Situation behandelt werden.

3. Stellen Sie sicher, dass der Code korrekt ist

Simplexml_Load_String handelt standardmäßig UTF-8 codierte Zeichenfolgen. Wenn das XML eine weitere Codierung ist (wie GBK, ISO-8859-1), muss die Codierung zuerst konvertiert werden:

 <?php
$xmlString = file_get_contents('http://gitbox.net/path/to/xmlfile.xml');
$xmlString = mb_convert_encoding($xmlString, 'UTF-8', 'GBK');

$xml = simplexml_load_string($xmlString);
if ($xml === false) {
    echo "Analyse fehlgeschlagen\n";
} else {
    print_r($xml);
}
?>

4. Verwenden Sie libxML_USE_internal_errors

Für ein besseres Debuggen kann die interne Fehlererfassung aktiviert werden:

 <?php
libxml_use_internal_errors(true);

$xmlString = '<invalid&xml>';

$xml = simplexml_load_string($xmlString);
if ($xml === false) {
    foreach (libxml_get_errors() as $error) {
        echo "Fehler:", $error->message;
    }
    libxml_clear_errors();
} else {
    print_r($xml);
}
?>

3. umfassende Beispiele

Hier ist ein umfassendes Beispiel, das demonstrieren, wie illegale Charaktere aufgeräumt werden, Codierung sicherstellen und Fehler aufnehmen:

 <?php
libxml_use_internal_errors(true);

$xmlString = file_get_contents('http://gitbox.net/sample.xml');

// Räumen Sie illegale Charaktere auf(Halten Sie die Linienpause、Eingeben、Tab -Symbole)
$xmlString = preg_replace('/[^\PC\s]/u', '', $xmlString);

// Code in UTF-8(Angenommen, die ursprüngliche Codierung ist GBK)
$xmlString = mb_convert_encoding($xmlString, 'UTF-8', 'GBK');

$xml = simplexml_load_string($xmlString);

if ($xml === false) {
    echo "Analyse fehlgeschlagen,Fehler信息如下:\n";
    foreach (libxml_get_errors() as $error) {
        echo trim($error->message), "\n";
    }
    libxml_clear_errors();
} else {
    echo "Erfolgreiche Analyse:\n";
    print_r($xml);
}
?>

4. Zusammenfassung

  • Wenn Simplexml_Load_String -Parsen fehlschlägt, besteht der erste Schritt darin, zu überprüfen, ob es illegale Steuerzeichen gibt und sie angemessen reinigen.

  • Bestätigen Sie, dass Sonderzeichen in der XML -Zeichenfolge korrekt entkommen wurden.

  • Stellen Sie sicher, dass die XML-Zeichenfolge als UTF-8 codiert ist und gegebenenfalls umwandelt.

  • Verwenden Sie libxMl_use_internal_errors (true), um detaillierte Fehlerinformationen zu erhalten, wodurch das Problem gefunden wird.

Das Beherrschen dieser Fähigkeiten kann effektiv vermeiden, dass an illegale Charaktere Fehler verursacht werden, wodurch das Parsen von XML stabiler und zuverlässiger wird.