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
Libérer: 2024-12-28 00:43:10
original
252 Les gens l'ont consulté

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);
    Copier après la connexion
  • 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'));
    Copier après la connexion
  • 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'));
    Copier après la connexion

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();
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal