Lorsque j'essaie d'écrire des chaînes UTF-8 dans un fichier XML à l'aide de DOMDocument, il écrit en fait la notation hexadécimale de la chaîne au lieu de la chaîne elle-même.
Par exemple: P>
×ר×ש×××
6 Réponses :
Passer apparemment la documentation en tant que noeud $ à SaveXML fonctionne autour de cela, bien que je ne puisse pas dire que je comprends pourquoi.
par exemple p> plutôt que: p> Source: http : //www.php.net/manual/fr/domdocument.savexml.php#88525 p> p>
La différence probable est la $ DOM code> n'a pas été initialisée avec un jeu de caractères pour le document dans le constructeur, mais l'élément de document a un sens de codage dans son contexte.
Lorsque j'ai créé le DOMDocument pour l'écriture, j'ai ajouté les paramètres suivants:
dom = new DOMDocument('1.0','utf-8');
OK, vous allez ici:
$dom = new DOMDocument(); $dom->loadXml('<?xml version="1.0" encoding="utf-8"?><root/>'); $dom->documentElement->appendChild(new DOMText('×ר×ש×××')); echo $dom->saveXml();
$doc = new DOMDocument(); $doc->loadHTML('<?xml encoding="UTF-8">' . $html); // dirty fix foreach ($doc->childNodes as $item) if ($item->nodeType == XML_PI_NODE) $doc->removeChild($item); // remove hack $doc->encoding = 'UTF-8'; // insert proper
Si vous souhaitez générer UTF-8 avec DOMDocument, vous devez spécifier cela. Simple, n'est-ce pas? Si vous sentez déjà une question d'ascendance, vous n'êtes pas trop loin, mais à première vue, il est tout droit.
Considérez l'exemple de code suivant (UTF-8 codé) qui génère des entités hexadécimales: P > sortie: p> tel que écrit, si vous souhaitez générer ceci en tant qu'UF-8, vous devez le spécifier, et Il est tout droit: p> la sortie est alors dans utf-8 explicitement em>: p> Je viens d'écrire "Dans utf-8 explicitement strong>" em> car également dans le premier exemple, la sortie est codée UTF-8, le XML vient de contenir des entités hexadécimales parfaitement valables - même dans UTF-8! P> Vous remarquez déjà que je commencez par la nit-cueille ici, mais rappelez-vous: Utf-8 est em> le codage par défaut em> de xml . P> et si vous commencez maintenant à dire: hey wait, si la valeur par défaut Encodage est UTF-8 de toute façon, pourquoi phps domdocument em> utilise les entités en premier lieu? p> Bien la vérité est, il ne les pas em> contrairement à la conclusion dans la question. Pas toujours em>. p> Voir l'exemple suivant qui utilise un commentaire XML au lieu d'une valeur de nœud contenant les lettres Ivrit: p> sortie: p> xxx pré> d'accord, tout clair? Donc, le sale petit secret ici est: si vous avez ces entités XML dedans ou non - pour le document, il ne fait pas une différence, c'est juste une forme différente d'écriture des mêmes données de caractères XML. Et vous vous sentez déjà invité: essayons CDATA au lieu de le premier exemple: p> sortie: p> Comme cela démontre comme avec l'exemple de commentaire XML avant, il y a Aucune entité XML utilisée ici. Eh bien, ils ne seraient pas valides de toute façon, comme avec l'exemple de commentaire XML. P> pour la vue d'ensemble permet de créer un exemple contenant tous ceux-ci: P> <?xml version="1.0"?>
<!-- ×ר×ש××× -->
<root>ירושלים <![CDATA[×ר×ש×××]]></root>
au point de réponse est la suivante:
Lorsque votre fonction démarre, juste après avoir obtenu le contenu, procédez comme suit: P> puis démarrez le nouveau document, etc. Vérifiez ceci comme exemple: p> puis faites ce que vous aviez l'intention de faire avec votre code. p> p>
(associé) i> de.php.net/ Manuel / FR / DOMDOCUMENT.CONSTRUCTECT.PHP # 98209