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

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

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 12:12:14883parcourir

Why is my PHP DOMDocument::loadHTML() not handling UTF-8 correctly?

PHP DOMDocument loadHTML n'encode pas correctement l'UTF-8

Problème :

Lors de l'analyse HTML avec DOMDocument::loadHTML() de PHP, les caractères UTF-8 ne sont pas interprétés correctement, conduisant à une sortie déformée.

Cause :

DOMDocument suppose que la chaîne d'entrée est en codage ISO-8859-1 par défaut. Cependant, UTF-8 est couramment utilisé en HTML5. Lors du chargement de chaînes UTF-8 sans spécifier l'encodage, DOMDocument les interprète mal.

Solution :

Pour résoudre ce problème, vous devez spécifier l'encodage correct pour l'entrée chaîne. Vous disposez de plusieurs options :

  • Préparez une déclaration d'encodage XML : Ajoutez un déclaration au début de la chaîne.
  • Utilisez une déclaration méta charset : Ajoutez un balise section du document.
  • Utilisez la bibliothèque SmartDOMDocument : Cette bibliothèque contourne le problème en convertissant la chaîne en entités HTML avant de la charger dans DOMDocument.
  • Utilisez la fonction mb_encode_numericentity() : Cette fonction convertit les caractères UTF-8 en leurs équivalents d'entité HTML, ce qui DOMDocument peut alors analyser correctement.

Exemple :

Ce code illustre l'utilisation de la fonction mb_encode_numericentity() :

$profile = '<p>イリノイ州シカゴにて、アイルランド系の家庭に</p>';
$dom = new DOMDocument();
$dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));
echo $dom->saveHTML();

En utilisant ces techniques, vous pouvez vous assurer que les caractères UTF-8 sont analysés et affichés correctement dans votre PHP DOMDocument.

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