OVH Cloud OVH Cloud

DOM PHP 5 : caracteres speciaux dans les attributs

13 réponses
Avatar
jamais.content
Bonjour,
J'utilise le DOM de PHP5 pour créer des documents XML.
J'ai un problème avec les accents. J'aimerais créer un noeud :
<input id="name" value="Valeur accentuée">
Pour cela je cree le noeud avec createElement puis je fais un
$node -> setAttribute ("value", $val);
Si je fais $val = "Valeur accentuée", PHP m'insulte au moment du
saveXML. Le caractère accentué a l'air de lui poser problème.
Si je fais $val = "Valeur accentu&eacute;e", PHP remplace
automatiquement le & par un &amp; au moment du saveXML et ce n'est pas
ce que je veux non plus.
Quelqu'un a t-il une solution ?
Merci d'avance.

3 réponses

1 2
Avatar
Lascap

Oui, oui, sauf que j'ai spécifié à "celui qui la relit" mon jeu de
caractères (ISO-8859-1, dans le constructeur de DOMDocument). Je
m'attends donc à ce que les méthodes appliquées à mon instance de DOM
prennent en entrée des chaines dans ce jeu de caractères. C'est bien
un problème de specs. La doc ne précise ce point nulle part.


Mais celui qui l'écrit??
C'est vrai que les specs des DomDocument, et des objets xml en général,
sont assez spéciales. D'après ce que je comprend moi, c'est que, quoi
qu'il arrive, l'objet DomDocument travaille sur de l'utf8. c'est à dire
que tout ce qu'on lui donne à manger doit etre utf8, d'ou les
conversions à grands coups de utf8_encode. Après, ça, il est possible de
"générer" du xml dans d'autres charset en le spécifiant, mais c'est une
conversion de plus, que l'objet fait de lui même cette fois, de utf8
vers le charset en question.

A prendre avec des pincettes, il est possible que je dise des conneries.

Lascap

Avatar
jamais.content
([...] dans le constructeur de DOMDocument).


l'interface Document n'a pas de constructeur.


http://www.php.net/manual/en/function.dom-domdocument-construct.php

Le charset d'entrée ou de sortie du document XML n'est affaire que du
module Load & Save.


http://www.php.net/manual/en/function.dom-domdocument-construct.php


Avatar
loufoque
Jamais-Content a dit le 18/02/2005 à 08:42:
http://www.php.net/manual/en/function.dom-domdocument-construct.php


Je parle de la spécification officielle, pas de l'implémentation dans PHP.

En PHP Document et DocumentLS (un vieux working draft) sont confondus.
L'argument dans le constructeur permet de choisir l'xmlEncoding, soit
l'encodage pour la linéarisation en XML.

1 2