Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche 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 15/12/2006, 16h26   #1
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605
Par défaut [SimpleXML] Problème avec les accents dans le XML

Bonjour,

Je me bats depuis ce matin pour gérer un fichier XML avec PHP.
J'utilise donc DOMDocument pour créer le fichier et SimpleXML pour ajouter des noeuds, etc ...


Voici donc le code de création :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function createNewXML()
{	
	// Création du fichier en mémoire 
	$file = new DOMDocument('1.0', 'iso-8859-1');
 
	// Création du noeud racine
	$root = $file->createElement('rss'); //On crée l élément racine
	$root->setAttribute('version', '2.0'); //On lui ajoute l attribut version (2.0)
	$root = $file->appendChild($root); //On insère la racine dans le document
 
	// Création du noeud channel
	$element_channel = $file->createElement('channel');//On crée un élément channel
	$element_channel->setAttribute('id','news'); //On donne un attribut id à notre channel
	$element_channel = $root->appendChild($element_channel);//On ajoute cet élément à la racine
 
	// Création du noeud description et ajout du texte à l élément
	$element_description = $file->createElement('description', 'Les actualités en général');
	$element_channel->appendChild($element_description);//on insère dans le noeud channel
 
	// Création du noeud link et ajout du texte à l élément 
	$element_link = $file->createElement('link', 'http://www.mon_site.com');
	$element_channel->appendChild($element_link);//on insère dans le noeud channel
 
	// Création du noeud title et ajout du texte à l élément 
	$element_title = $file->createElement('title', 'Actualités');
	$element_channel->appendChild($element_title);//on insère dans le noeud channel
 
	//sauvegarde du fichier XML
	$file->save('flux_rss.xml');
 
	//On retourne le fichier XML
	return openXML();
}
Problème : Ici comme vous pouvez le voir j'ai créer des noeuds avec des accents et cela ne fonctionne pas.
  • Si je laisse le code ainsi : l'enregistrement ($file->save('flux_rss.xml');) foire et j'ai une erreur
    Citation:
    output conversion failed due to conv error, bytes 0xE9 0x73 0x20 0x65
    Donc le fichier flux_rss.xml est vide.
  • J'ai donc essayé en entourant mon texte ayant des caractères accentués avec <![CDATA [...]]>, c'est pareil.
  • J'ai donc essayé de feinter en utilisant htmlentities plutôt que CDATA. Il y a alors de l'amélioration : mon fichier XML est enregistré et lorsque je regarde le contenu, les accents sont bien remplacés par leur équivalent HTML mais lorsque j'essaie de réouvrir le fichier avec la fonction suivante :
    Code :
    1
    2
    3
    4
    5
    6
    7
    function openXML()
    {	
    	// Ouverture du fichier
    	$file = @simplexml_load_file ('flux_rss.xml');
     
    	//On retourne le fichier
    	return $file;
    ça plante avec le warning suivant (entre autres) :
    Citation:
    simplexml_load_file() [function.simplexml-load-file]: flux_rss.xml:2: parser error : Entity 'eacute' not defined
    du coup le fichier n'est pas chargé...
  • J'ai essayé en passant par l'utf-8, l'erreur est différente :
    Citation:
    simplexml_load_file() [function.simplexml-load-file]: flux_rss.xml:2: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xE9 0x73 0x20 0x65
    donc le fichier n'est pas chargé. Niveau résultat : j'ai un fichier XML dont tous les caractères accentués ont disparus.

J'ai regardé 50000 tutos, forum, FAQ, specifications et autres sur le Net mais rien ne marche. J'avais vu ce lien : http://www.developpez.net/forums/sho...ht=rss+accents et j'y croyais... mais non.

Donc j'aurais besoin d'aider s'il vous plait.
Si quelqu'un voit comment résoudre le problème, je suis preneur.

Merci d'avance.

PS : je crois que j'aurais mieux fait de ne pas me réveiller ce matin.
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2006, 22h03   #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 trotters213
J'ai donc essayé de feinter en utilisant htmlentities plutôt que CDATA. Il y a alors de l'amélioration : mon fichier XML est enregistré et lorsque je regarde le contenu, les accents sont bien remplacés par leur équivalent HTML
c'est parce que ces entitées sont définies dans la DTD d'html et ils n'existent pas dans la DTD de RSS

pour le cas où tu as mis "utf-8" dans le constructeur de DOMDocument est ce que tu as utilisé "utf8_encode" comme çà : ?
Code :
    $element_description = $file->createElement('description', utf8_encode('Les actualités en général'));
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 10h23   #3
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605
Dans le mille !
Merci mathieu.

Mais je ne comprends toujours pas la raison pour laquelle ça ne fonctionnait pas auparavant avlors que chez tout le monde ça marche
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h37.


 
 
 
 
Partenaires

Hébergement Web