Maison >développement back-end >tutoriel php >Pourquoi mon PHP DOMDocument::loadHTML() ne gère-t-il pas correctement l'encodage UTF-8 ?
PHP DOMDocument loadHTML n'encode pas correctement l'UTF-8
Lorsque vous essayez d'analyser du HTML à l'aide de DOMDocument::loadHTML(), vous pouvez rencontrer des problèmes avec un encodage UTF-8 approprié. Par défaut, DOMDocument traite les chaînes d'entrée comme ISO-8859-1, ce qui peut entraîner des erreurs lors du traitement des données UTF-8.
Solution :
Pour garantir l'exactitude encodage, vous pouvez utiliser différentes méthodes :
Prepend Encoding Déclarations :Ajoutez une déclaration d'encodage XML ou une déclaration HTML méta charset pour indiquer la présence de caractères UTF-8 :
$contentType = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'; $dom->loadHTML($contentType . $profile);
Utilisez SmartDOMDocument : Si le code HTML d'entrée contient déjà des déclarations, utilisez la bibliothèque SmartDOMDocument pour résoudre les problèmes potentiels. conflits :
$dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8'));
Alternative : En PHP 8.2, utilisez mb_encode_numericentity() pour une option d'encodage plus sûre :
$dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));
HTML5 Considérations :
DOMDocument utilise un analyseur HTML4. Pour les documents HTML5, envisagez d'utiliser des analyseurs HTML alternatifs conçus pour la conformité HTML5.
Exemple :
Le code suivant démontre l'utilisation de mb_convert_encoding() pour corriger un UTF-8 incorrect. encodage :
$profile = ""; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!