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 ?
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).
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'.
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.Voici un exemple qui démontre l'utilisation d'entités HTML :
$html = '<meta http-equiv="content-type" content="text/html; charset=utf-8">
<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!