11
votes

PHP: Utiliser DomDocument Chaque fois que j'essaie d'écrire UTF-8, il écrit la notation hexadécimale de celui-ci

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 :


3
votes

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 xxx

plutôt que: xxx

Source: http : //www.php.net/manual/fr/domdocument.savexml.php#88525


1 commentaires

La différence probable est la $ DOM 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.



0
votes

Lorsque j'ai créé le DOMDocument pour l'écriture, j'ai ajouté les paramètres suivants:

dom = new DOMDocument('1.0','utf-8');


0 commentaires

18
votes

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


0 commentaires

0
votes
$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

0 commentaires

6
votes

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 > xxx pré>

sortie: p> xxx pré>

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> xxx pré>

la sortie est alors dans utf-8 explicitement em>: p> xxx pré> Voilà pour la partie droite. Si vous êtes intéressé par les sales petits détails, vous êtes libre de lire sur - sinon, veuillez ne pas demander "pourquoi?" 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> xxx pré>

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> xxx pré>

sortie: p> xxx pré>

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>&#x5D9;&#x5E8;&#x5D5;&#x5E9;&#x5DC;&#x5D9;&#x5DD; <![CDATA[ירושלים]]></root>


0 commentaires

1
votes

au point de réponse est la suivante:

Lorsque votre fonction démarre, juste après avoir obtenu le contenu, procédez comme suit: xxx

puis démarrez le nouveau document, etc. Vérifiez ceci comme exemple: xxx

puis faites ce que vous aviez l'intention de faire avec votre code.


0 commentaires