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="Content-Type" content="text/html; charset=utf-8">'; $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 = ""; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として
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!