Heim > Backend-Entwicklung > PHP-Tutorial > Warum verarbeitet meine PHP-DOMDocument-loadHTML-Funktion die UTF-8-Codierung nicht korrekt?

Warum verarbeitet meine PHP-DOMDocument-loadHTML-Funktion die UTF-8-Codierung nicht korrekt?

Patricia Arquette
Freigeben: 2024-12-11 19:59:15
Original
972 Leute haben es durchsucht

Why is my PHP DOMDocument loadHTML function not handling UTF-8 encoding correctly?

PHP DOMDocument loadHTML kodiert UTF-8 nicht korrekt

Problem

Sie verwenden DOMDocument zum Parsen von HTML, aber die Kodierung scheint verloren zu sein wenn Sie den HTML-Code laden. Japanische Zeichen im HTML werden durch verstümmelten Text ersetzt, während sie korrekt angezeigt werden, wenn die HTML-Zeichenfolge direkt über Echo ausgegeben wird.

Ursache

DOMDocument geht davon aus, dass die Eingabezeichenfolge in ISO-8859-1 vorliegt (der HTTP/1.1-Standardzeichensatz) standardmäßig verwendet. Beim Parsen von UTF-8-Strings führt diese falsche Annahme zu einer Fehlinterpretation und damit zu verstümmelten Zeichen.

Lösung

Um sicherzustellen, dass DOMDocument den HTML-String mit der richtigen Codierung lädt, haben Sie mehrere Möglichkeiten:

  1. Stellen Sie eine XML-Codierungsdeklaration oder einen Meta-Zeichensatz voran Deklaration: Fügen Sie vor dem Laden der HTML-Zeichenfolge hinzu. oder . Dies erzwingt, dass die Zeichenfolge als UTF-8 behandelt wird.
  2. Verwenden Sie SmartDOMDocument: Diese externe Bibliothek bietet eine LoadHTMLCharset-Funktion, die automatisch die richtige Codierung erkennt und verarbeitet.
  3. Konvertieren Sie den String in HTML-Entitäten: Die PHP-Funktion mb_convert_encoding kann den HTML-String in HTML konvertieren Entitäten, die die UTF-8-Kodierung verwenden. Laden Sie diese konvertierte Zeichenfolge in das DOM-Dokument.
  4. Verwenden Sie mb_encode_numericentity: Diese Funktion codiert High-ASCII-Bytes mit numerischen Entitäten und stellt so sicher, dass die Zeichenfolge auch mit ISO-8859-1-Einschränkungen korrekt analysiert werden kann ( PHP 8.2 Nur).

Beispiel

Hier ist ein Beispiel mit einer Meta-Zeichensatzdeklaration:

$profile = '<p>イリノイ州シカゴにて、アイルランド系の家庭に、9</p>';
$dom = new DOMDocument();

// Add meta charset declaration
$contentType = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
$dom->loadHTML($contentType . $profile);

echo $dom->saveHTML();
Nach dem Login kopieren

Dadurch wird die HTML-Zeichenfolge mit der richtigen UTF-8-Kodierung geladen , wobei die ursprünglichen japanischen Zeichen erhalten bleiben.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage