Heim >Backend-Entwicklung >PHP-Tutorial >Warum verarbeitet mein PHP DOMDocument::loadHTML() die UTF-8-Codierung nicht korrekt?

Warum verarbeitet mein PHP DOMDocument::loadHTML() die UTF-8-Codierung nicht korrekt?

Barbara Streisand
Barbara StreisandOriginal
2024-12-28 00:43:10172Durchsuche

Why is my PHP DOMDocument::loadHTML() Not Handling UTF-8 Encoding Correctly?

PHP DOMDocument loadHTML kodiert UTF-8 nicht korrekt

Beim Versuch, HTML mit DOMDocument::loadHTML() zu analysieren, können Probleme auftreten mit korrekter UTF-8-Kodierung. Standardmäßig behandelt DOMDocument Eingabezeichenfolgen als ISO-8859-1, was beim Umgang mit UTF-8-Daten zu Fehlern führen kann.

Lösung:

Um die Korrektheit sicherzustellen Bei der Kodierung können Sie verschiedene Methoden anwenden:

  • Kodierung voranstellen Deklarationen: Fügen Sie eine XML-Codierungsdeklaration oder eine HTML-Meta-Zeichensatzdeklaration hinzu, um das Vorhandensein von UTF-8-Zeichen anzuzeigen:

    $contentType = '<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;>';
    $dom->loadHTML($contentType . $profile);
  • Verwenden Sie SmartDOMDocument: Wenn der Eingabe-HTML möglicherweise bereits Deklarationen enthält, verwenden Sie die SmartDOMDocument-Bibliothek, um potenzielle Probleme zu lösen Konflikte:

    $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8'));
  • Alternative: Verwenden Sie in PHP 8.2 mb_encode_numericentity() für eine sicherere Codierungsoption:

    $dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));

HTML5 Überlegungen:

DOMDocument verwendet einen HTML4-Parser. Erwägen Sie für HTML5-Dokumente die Verwendung alternativer HTML-Parser, die für die HTML5-Konformität entwickelt wurden.

Beispiel:

Der folgende Code demonstriert die Verwendung von mb_convert_encoding() zur Korrektur falscher UTF-8 Kodierung:

$profile = "

イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として

"; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();

Das obige ist der detaillierte Inhalt vonWarum verarbeitet mein PHP DOMDocument::loadHTML() die UTF-8-Codierung nicht korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn