IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Problème avec les accents dans le XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
      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 : Sélectionner tout - Visualiser dans une fenêtre à part
      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) :
      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 :
      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.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 424
    Points : 15 796
    Points
    15 796
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
        $element_description = $file->createElement('description', utf8_encode('Les actualités en général'));

  3. #3
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JDOM] Problème avec les accents français lors de création de fichier Xml
    Par jean1979 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 05/01/2012, 10h08
  2. [XML] Problème avec les accents
    Par padrone dans le forum MXML
    Réponses: 4
    Dernier message: 06/10/2009, 13h47
  3. Problème avec les accents sous xml.
    Par simplyme dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 11/07/2009, 19h52
  4. [MySQL] Problème avec les accent lors d'une recherche dans ma base de donnée
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/06/2009, 14h08
  5. Problème avec les accents dans wxLogTextCtrl
    Par dug dans le forum wxWidgets
    Réponses: 3
    Dernier message: 06/04/2009, 17h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo