


Warum kann DOMDocument beim Laden von HTML UTF-8-Zeichen nicht korrekt verarbeiten?
Nov 04, 2024 am 10:12 AMDOMDocument kann UTF-8-Zeichen nicht verarbeiten
In einem Szenario, in dem ein Webserver Antworten mit UTF-8-Codierung überträgt, gilt dies für alle Dateien ebenfalls in UTF-8 gespeichert und alle relevanten Einstellungen für die UTF-8-Kodierung konfiguriert wurden, tritt ein Problem auf. Ein Testprogramm zur Überprüfung der Ausgabefunktion zeigt unregelmäßiges Verhalten.
Bei der Ausführung des Programms wird die Ausgabe wie folgt gerendert:
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>Test!</title></head><body> <h1>☆ Hello ☆ World ☆</h1> </body></html>
was wie folgt aussieht:
< ;h1>☆ Hallo ☆ Welt ☆</h1>
Das Programm:
<code class="php">$html = <<<HTML <!doctype html> <html> <head> <meta charset="utf-8"> <title>Test!</title> </head> <body> <h1>☆ Hello ☆ World ☆</h1> </body> </html> HTML; $dom = new DOMDocument("1.0", "utf-8"); $dom->loadHTML($html); header("Content-Type: text/html; charset=utf-8"); echo($dom->saveHTML());</code>
Ursache
Die zugrunde liegende Ursache ist, dass DOMDocument::loadHTML() erwartet einen String im HTML-Format. HTML verwendet standardmäßig ISO-8859-1 (ISO Latin Alphabet No. 1) als Standardzeichenkodierung. Wenn ein für HTML 4.0 entwickelter HTML-Parser auf Zeichen stößt, die diese Codierung überschreiten, kann es daher zu unvorhersehbarem Verhalten kommen.
Lösung
Nicht-ASCII-Zeichen in Entitäten konvertieren
Um dieses Problem zu beheben, sollten alle Zeichen außerhalb des ASCII-Bereichs (127 / h7F) konvertiert werden in HTML-Entitäten. Dieser Prozess kann durch den Einsatz von mb_convert_encoding mit der HTML-ENTITIES-Zielkodierung erreicht werden:
<code class="php">$html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8");</code>
Hinzufügen eines Inhaltstyp-Meta-Tags
Alternativ kann das Problem gelöst werden durch Einbinden eines <meta> Tag in das Dokument selbst ein und gibt den Zeichensatz als UTF-8 an:
<code class="html"><meta http-equiv="content-type" content="text/html; charset=utf-8"></code>
Diese Methode dient als Hinweis für das DOMDocument und zwingt es dazu, die Eingabe als UTF-8-codiert zu interpretieren. Selbst wenn es außerhalb des <Kopf> Abschnitt schreiben die HTML 2.0-Spezifikationen vor, dass solche Elemente automatisch innerhalb des Headers verschoben werden.
Das obige ist der detaillierte Inhalt vonWarum kann DOMDocument beim Laden von HTML UTF-8-Zeichen nicht korrekt verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium)

Arbeiten mit Flash -Sitzungsdaten in Laravel

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren

12 Beste PHP -Chat -Skripte auf Codecanyon
