DomDocument et caractères spéciaux
C'est mon code:
$oDom = new DOMDocument();
$oDom->loadHTML("èàéìòù");
echo $oDom->saveHTML();
C'est la sortie:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>èà éìòù</p></body></html>
Je veux cette sortie:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>èàéìòù</p></body></html>
J'ai essayé avec ...
$oDom = new DomDocument('4.0', 'UTF-8');
ou avec la 1.0 et d'autres choses, mais rien.
Autre chose ...
Il y a un moyen d'obtenir le même intacte HTML?
Par exemple avec ce code html dans l'entrée <p>hello!</p>
obtenir le même résultat <p>hello!</p>
DOMDocument à l'aide uniquement de l'analyse du DOM et de faire certaines substitutions à l'intérieur des balises.
source d'informationauteur Francesco Casula
Vous devez vous connecter pour publier un commentaire.
Solution:
La
saveHTML()
méthode fonctionne différemment de la spécification d'un nœud.Vous pouvez utiliser le nœud principal (
$oDom->documentElement
) ajout de l'souhaité!DOCTYPE
manuellement.Une autre chose importante est
utf8_decode()
.Tous les attributs et les autres méthodes de la
DOMDocument
classe, dans mon cas, ne pas produire le résultat désiré.Essayer de définir le type d'encodage après que vous avez chargé le HTML.
Autre façon
Le problème semble être connu, selon les commentaires de l'utilisateur sur le page de manuel à php.net. Les Solutions proposées il y a notamment de mettre
dans le document avant de mettre de chaînes de caractères non ASCII caractères.
Un autre hack suggère de mettre
comme le premier texte dans le document, puis l'enlever à la fin.
Choses désagréables. Sent comme un bug pour moi.
Ressemble, il vous suffit de définir substituteEntities lorsque vous créez l'objet DOMDocument.