Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2006, 10h07   #1
Nouveau Membre du Club
 
Inscription : juin 2002
Messages : 160
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 160
Points : 37
Points : 37
Par défaut [DOM] Encodage UTF-8 dans fichier XML et PHP

Bonjour,

J'ai déjà lu plusieurs messages se rapprochant de mon problème mais aucun qui correspond vraiment à ce que je cherche...

Voilà je dois écrire avec un programme PHP un fichier XML encodé en UTF-8.
J'ai donc écrit ce code :
Code :
$doc = new DOMDocument('1.0','utf-8');
Puis à chaque fois que j'écris du texte susceptible de contenir des caractères spéciaux :
Code :
($doc->createTextNode(utf8_encode($metadata[0]['TITRE'])));
Le problème est que quand j'ouvre le fichier xml (avec un éditeur XML)crée les caractères spéciaux apparaissent "normaux" c'est à dire par exemple j'ai des 'é' affichés alors que j'attends des é à la place...

Comme je n'y connais pas grand chose dans ces problèmes d'encodage je nage un peu et je vois pas trop quoi faire...

Merci de votre aide!!
norkius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2006, 12h27   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par norkius
Le problème est que quand j'ouvre le fichier xml (avec un éditeur XML)crée les caractères spéciaux apparaissent "normaux" c'est à dire par exemple j'ai des 'é' affichés alors que j'attends des é à la place...
ce n'est pas un problème, le "é" que tu vois est bien en UTF-8 il n'y a pas besoin d'utiliser des entitées
d'ailleurs le code héxadécimal de "é" c'est "E9" en ISO-8859-1 mais c'est "C3A9" en UTF-8
regarde là :
http://fr.wikipedia.org/wiki/Utf-8
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2006, 12h37   #3
Nouveau Membre du Club
 
Inscription : juin 2002
Messages : 160
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 160
Points : 37
Points : 37
Je croyais également que ça ne posais pas de problème d'avoir un 'é' affiché.

Seulement la société à qui je dois fournir ce fichier XML se plaint d'avoir des caractères 'Hi-ASCII' (je ne sais d'ailleurs pas ce que ça signifie exactement...) à la place de caractères unicode...

Ils m'ont fourni un fichier XML exemple où leur 'é' sont codés en &#x000E9 quand je les ouvre avec un éditeur quelconque. C'est la raison pour laquelle j'essaie d'obtenir le même résultat...

Merci!!
norkius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2006, 15h33   #4
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Bonjour,

Citation:
Envoyé par norkius
Seulement la société à qui je dois fournir ce fichier XML se plaint d'avoir des caractères 'Hi-ASCII' (je ne sais d'ailleurs pas ce que ça signifie exactement...) à la place de caractères unicode...
Hi-ASCII, ça ne veut rien dire (ils font peut-être référence aux caractères dans la tranche 128-255)...

A priori, cette société emploie un logiciel qui n'est pas basé sur un parseur XML standard, sans cela ils n'auraient aucun problème à lire de l'Unicode. Tu n'as plus qu'à leur fournir un fichier en ASCII pur.
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2006, 16h40   #5
Nouveau Membre du Club
 
Inscription : juin 2002
Messages : 160
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 160
Points : 37
Points : 37
C'est une société américaine peut-être que 'Hi-ASCII' signifie qq chose de particulier chez eux?

Qu'entendez vous par ASCII pur ?
Est ce qu'il n'existe aucun moyen simple d'obtenir ce type de code (&#x000E9) à la place de mes caractères 'é' ?

Merci encore...
norkius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 10h39   #6
Nouveau Membre du Club
 
Inscription : juin 2002
Messages : 160
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 160
Points : 37
Points : 37
J'en profite pour vous demander si quelqu'un peut m'expliquer à quoi correspond ce type d'encodage ? (&#x000E9)
Quant on regarde les codes dans les tables de conversion unicode pour un 'é' on trouve plutôt &#233
Est ce que ces deux codes sont de l'UTF-8 ? Ou puis je trouver une table qui correspond au premier type de code? Peut-on retrpuver à partir de &#233 le code &#x000E9?

Merci de votre aide car je dois dire que je nage un peu
norkius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 15h24   #7
Nouveau Membre du Club
 
Inscription : juin 2002
Messages : 160
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 160
Points : 37
Points : 37
Bon j'ai trouvé dans mes connaissances quelqu'un qui m'a vaguement expliqué que ce que souhaite la société ce n'est en fait pas de l'UTF-8 mais l'entité HTML en héxadécimal du code du caractère...
Bref, j'ai récupéré une fonction qui transforme mais 'é' en '&#233' (je n'ai pas la version en héxadécimal mais c'est déjà un début...)

Du coup nouveau problème dans le code source de mon fichier XML je me retrouve avec des &#233 autrement dit il semblerait que mon code quelque part transforme systématiquement le & en & alors qu'il est utilisé dans un contexte d'entité!!

Voici mon code :
Code :
1
2
3
4
5
6
7
8
	$doc = new DOMDocument('1.0','utf-8');
		$doc->formatOutput = true;
		//racine
		......
	 	  $Xarticleid->appendChild($doc->createTextNode(htmlnumericentities(" un accent aigu é puis un astérisque ¤")));
 
 
	 	$doc->save("test.xml");
qui me donne un fichier comme ceci :
Citation:
<article-id>
un accent aigu &amp;#233; puis un ast&amp;#233;risque &amp;#164;
</article-id>
Alors nouvelle question comment puis-je éviter ça???

Merci pour tout éclairage car je pète un boulon!!
norkius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 15h44   #8
Nouveau Membre du Club
 
Inscription : juin 2002
Messages : 160
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 160
Points : 37
Points : 37
Bon je viens de lire que c'est le createTextNode qui est à l'origine de ça...
L'utilisation de createCDATASection ne pose pas ce problème sauf que ce n'est évidemment pas ce dont j'ai besoin mais ça en aidera peut-être d'autres!!
norkius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h15.


 
 
 
 
Partenaires

Hébergement Web