DOM PHP 5 : caracteres speciaux dans les attributs
13 réponses
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ée", PHP remplace
automatiquement le & par un & 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.
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ée", PHP remplace automatiquement le & par un & 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.
Essaye avec un encodage ISO-8859-1.
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ée", PHP remplace
automatiquement le & par un & 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.
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ée", PHP remplace automatiquement le & par un & 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.
Essaye avec un encodage ISO-8859-1.
Olivier Miakinen
J'utilise le DOM de PHP5 pour créer des documents XML. [...]
Essaye avec un encodage ISO-8859-1.
Tiens ? C'est rigolo, mais j'aurais pensé l'inverse : que pour XML cela doit mieux marcher avec un encodage utf-8.
J'utilise le DOM de PHP5 pour créer des documents XML.
[...]
Essaye avec un encodage ISO-8859-1.
Tiens ? C'est rigolo, mais j'aurais pensé l'inverse : que pour XML cela
doit mieux marcher avec un encodage utf-8.
Pourtant cela correspond à ma remarque d'hier. Par défaut, XML utilise le charset UTF-8 sauf si tu spécifies explicitement le contraire. D'un autre côté, il n'est pas rare que les éditeurs de texte soient par défaut en iso-8859-1 (voire en cp1252 si tu es sur un système Windows). Du coup, tu dois transformer ton texte de iso-8859-1 (ou cp1252 qui est un sur-ensemble de l'autre) en utf-8, or c'est exactement ce que fait la fonction utf8_encode.
j'ai l'impression que les specs du DOM ne sont pas encore très claires.
Le DOM n'est aucunement en cause ici. Tu lui transmets une chaîne d'octets qu'il se contente de recopier telle quelle. Le problème vient de ce que celui qui a écrit la chaîne et celui qui la relit ne parlent pas le même langage, mais celui qui l'a passée de l'un à l'autre n'est pas responsable.
Pourtant cela correspond à ma remarque d'hier. Par défaut, XML utilise
le charset UTF-8 sauf si tu spécifies explicitement le contraire. D'un
autre côté, il n'est pas rare que les éditeurs de texte soient par
défaut en iso-8859-1 (voire en cp1252 si tu es sur un système Windows).
Du coup, tu dois transformer ton texte de iso-8859-1 (ou cp1252 qui est
un sur-ensemble de l'autre) en utf-8, or c'est exactement ce que fait la
fonction utf8_encode.
j'ai l'impression que les specs du DOM ne sont pas encore très claires.
Le DOM n'est aucunement en cause ici. Tu lui transmets une chaîne
d'octets qu'il se contente de recopier telle quelle. Le problème vient
de ce que celui qui a écrit la chaîne et celui qui la relit ne parlent
pas le même langage, mais celui qui l'a passée de l'un à l'autre n'est
pas responsable.
Pourtant cela correspond à ma remarque d'hier. Par défaut, XML utilise le charset UTF-8 sauf si tu spécifies explicitement le contraire. D'un autre côté, il n'est pas rare que les éditeurs de texte soient par défaut en iso-8859-1 (voire en cp1252 si tu es sur un système Windows). Du coup, tu dois transformer ton texte de iso-8859-1 (ou cp1252 qui est un sur-ensemble de l'autre) en utf-8, or c'est exactement ce que fait la fonction utf8_encode.
j'ai l'impression que les specs du DOM ne sont pas encore très claires.
Le DOM n'est aucunement en cause ici. Tu lui transmets une chaîne d'octets qu'il se contente de recopier telle quelle. Le problème vient de ce que celui qui a écrit la chaîne et celui qui la relit ne parlent pas le même langage, mais celui qui l'a passée de l'un à l'autre n'est pas responsable.
jamais.content
j'ai l'impression que les specs du DOM ne sont pas encore très claires.
Le DOM n'est aucunement en cause ici. Tu lui transmets une chaîne d'octets qu'il se contente de recopier telle quelle. Le problème vient de ce que celui qui a écrit la chaîne et celui qui la relit ne parlent pas le même langage, mais celui qui l'a passée de l'un à l'autre n'est pas responsable.
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.
j'ai l'impression que les specs du DOM ne sont pas encore très claires.
Le DOM n'est aucunement en cause ici. Tu lui transmets une chaîne
d'octets qu'il se contente de recopier telle quelle. Le problème vient
de ce que celui qui a écrit la chaîne et celui qui la relit ne parlent
pas le même langage, mais celui qui l'a passée de l'un à l'autre n'est
pas responsable.
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.
j'ai l'impression que les specs du DOM ne sont pas encore très claires.
Le DOM n'est aucunement en cause ici. Tu lui transmets une chaîne d'octets qu'il se contente de recopier telle quelle. Le problème vient de ce que celui qui a écrit la chaîne et celui qui la relit ne parlent pas le même langage, mais celui qui l'a passée de l'un à l'autre n'est pas responsable.
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.
loufoque
Jamais-Content a dit le 15/02/2005 à 20:07:
([...] dans le constructeur de DOMDocument).
l'interface Document n'a pas de constructeur.
D'ailleurs je tiens à signaler que la création de documents se fait avec DOMImplementation généralement.
La spécification spécifie clairement que les chaînes doivent être en UTF-16. En PHP, on a déjà des chaînes 8-bit très fonctionnelles alors on utilise UTF-8. Le charset d'entrée ou de sortie du document XML n'est affaire que du module Load & Save.
Jamais-Content a dit le 15/02/2005 à 20:07:
([...] dans le constructeur de DOMDocument).
l'interface Document n'a pas de constructeur.
D'ailleurs je tiens à signaler que la création de documents se fait avec
DOMImplementation généralement.
La spécification spécifie clairement que les chaînes doivent être en
UTF-16. En PHP, on a déjà des chaînes 8-bit très fonctionnelles alors on
utilise UTF-8.
Le charset d'entrée ou de sortie du document XML n'est affaire que du
module Load & Save.
D'ailleurs je tiens à signaler que la création de documents se fait avec DOMImplementation généralement.
La spécification spécifie clairement que les chaînes doivent être en UTF-16. En PHP, on a déjà des chaînes 8-bit très fonctionnelles alors on utilise UTF-8. Le charset d'entrée ou de sortie du document XML n'est affaire que du module Load & Save.