Maison >développement back-end >tutoriel php >Pourquoi mon PHP DOMDocument::loadHTML() ne gère-t-il pas correctement l'encodage UTF-8 ?

Pourquoi mon PHP DOMDocument::loadHTML() ne gère-t-il pas correctement l'encodage UTF-8 ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-28 00:43:10169parcourir

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

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=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;>';
    $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 = "

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

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn