Maison  >  Article  >  développement back-end  >  Pourquoi DOMDocument a-t-il du mal avec l'encodage UTF-8 lors du chargement de chaînes HTML en PHP ?

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

DDD
DDDoriginal
2024-11-04 09:33:30564parcourir

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">

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());

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 ☆

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