Pourquoi DOMDocument a-t-il du mal avec l'encodage UTF-8 lors du chargement de chaînes HTML en PHP ?

DDD
Libérer: 2024-11-04 09:33:30
original
606 Les gens l'ont consulté

Why does DOMDocument struggle with UTF-8 encoding when loading HTML strings in PHP?

Mauvais encodage DOMDocument

La documentation PHP DOMDocument suggère qu'il prend en charge l'encodage UTF-8 dès le départ, mais comme le démontre l'exemple de code fourni, ce n'est pas toujours le cas. le cas. Le problème se pose car DOMDocument::loadHTML() attend une chaîne HTML dans un encodage spécifique, qui est historiquement ISO-8859-1 (Latin-1).

Conversion de chaînes en entités HTML

Pour résoudre ce problème, nous devons convertir la chaîne en un encodage que DOMDocument peut gérer. Une option consiste à convertir les caractères non-ASCII en entités HTML, en les évitant ainsi. Ceci peut être réalisé en utilisant la fonction mb_convert_encoding() avec l'encodage cible 'HTML-ENTITIES'.

Ajout d'une balise méta de type contenu

Une autre approche consiste à faire allusion à l'encodage du document en ajoutant un balise au début de la chaîne HTML. Cette balise précise le jeu de caractères, dans ce cas UTF-8 :

<meta http-equiv="content-type" content="text/html; charset=utf-8">
Copier après la connexion

Cette balise méta sera automatiquement placée dans le répertoire du document, en garantissant que le DOMDocument reconnaît correctement l'encodage.

Exemple de code

Voici un exemple qui démontre l'utilisation d'entités HTML :

$html = '&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
<html><head><title>Test!</title></head><body><h1>☆ Hello ☆ World ☆</h1></body></html>';

$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTML($html);

header('Content-Type: text/html; charset=utf-8');
echo($dom->saveHTML());
Copier après la connexion

En utilisant quelle que soit la méthode, nous pouvons garantir que le DOMDocument peut gérer correctement les caractères UTF-8, permettant au programme de générer le résultat souhaité :




    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    Test!


    

☆ Hello ☆ World ☆

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!

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