Maison > développement back-end > tutoriel php > Pourquoi ma fonction PHP DOMDocument loadHTML ne gère-t-elle pas correctement l'encodage UTF-8 ?

Pourquoi ma fonction PHP DOMDocument loadHTML ne gère-t-elle pas correctement l'encodage UTF-8 ?

Patricia Arquette
Libérer: 2024-12-11 19:59:15
original
972 Les gens l'ont consulté

Why is my PHP DOMDocument loadHTML function not handling UTF-8 encoding correctly?

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

Problème

Vous utilisez DOMDocument pour analyser le HTML, mais l'encodage semble être perdu lorsque vous chargez le HTML. Les caractères japonais dans le code HTML sont remplacés par du texte tronqué, alors qu'ils s'affichent correctement lors de la sortie de la chaîne HTML directement via echo.

Cause

DOMDocument suppose que la chaîne d'entrée est au format ISO-8859-1. (le jeu de caractères par défaut HTTP/1.1) par défaut. Lors de l'analyse des chaînes UTF-8, cette hypothèse incorrecte entraîne une mauvaise interprétation, conduisant à des caractères tronqués.

Solution

Pour garantir que DOMDocument charge la chaîne HTML avec le codage correct, vous disposez de plusieurs options :

  1. Préparez une déclaration d'encodage XML ou une déclaration de méta-charset : Avant le chargement la chaîne HTML, ajoutez ou . Cela force la chaîne à être traitée comme UTF-8.
  2. Utilisez SmartDOMDocument : Cette bibliothèque externe propose une fonction loadHTMLCharset qui détecte et gère automatiquement l'encodage correct.
  3. Convertir la chaîne en entités HTML : La fonction mb_convert_encoding de PHP peut convertir la chaîne HTML en HTML entités utilisant le codage UTF-8. Chargez cette chaîne convertie dans le DOMDocument.
  4. Utilisez mb_encode_numericentity : Cette fonction encode les octets ASCII élevé avec des entités numériques, garantissant que la chaîne peut être analysée correctement même avec les limitations ISO-8859-1 ( PHP8.2 uniquement).

Exemple

Voici un exemple utilisant une déclaration méta charset :

$profile = '<p>イリノイ州シカゴにて、アイルランド系の家庭に、9</p>';
$dom = new DOMDocument();

// Add meta charset declaration
$contentType = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
$dom->loadHTML($contentType . $profile);

echo $dom->saveHTML();
Copier après la connexion

Cela chargera la chaîne HTML avec le codage UTF-8 correct , en préservant les caractères japonais originaux.

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!

source:php.cn
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