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] caractères spéciaux


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Par défaut [SimpleXML] caractères spéciaux
    Bonjour à tous,
    encore un petit problème de caractère spéciaux:

    J'ai un document (menu.xml) encondé en iso-8859 contenant l'arborescence d'un menu. Je parse ce menu par SimpleXML de php5 pour exploiter les informations de mon fichier.
    Le menu est crée corectement, mais les accents ne sont pas reconnus et des "é" et autres apparaissent.
    En sachant que les accents s'affichent correctement quand je lis mon menu.xml dans IE ou Mozilla, j'en conclue que la faille vient du parseur.

    Quelqu'un a une solution?

    Une partie de mon fichier XML:
    Code XML : 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
    34
    <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
     
    <!DOCTYPE menu [
     
    	<!ELEMENT menu (rubrique*)>
     
    	<!ELEMENT rubrique (sous_rubrique*)>
    	<!ATTLIST rubrique id CDATA #REQUIRED nom NMTOKENS #REQUIRED>
     
    	<!ELEMENT sous_rubrique (ssous_rubrique*)>
    	<!ATTLIST sous_rubrique id CDATA #REQUIRED nom NMTOKENS #REQUIRED>
     
    	<!ELEMENT ssous_rubrique (#PCDATA)>
     
     
    ]>
     
    <menu>
    	<rubrique id="1" nom="Découvrir Guilliers">
     
    		<sous_rubrique id="1" nom="Venir à Guilliers">
    		</sous_rubrique>
     
    		<sous_rubrique id="2" nom="Guilliers en bref">
    			<ssous_rubrique>Présentation</ssous_rubrique>
    			<ssous_rubrique>Naissance</ssous_rubrique>
    			<ssous_rubrique>Le mot économique</ssous_rubrique>
    			<ssous_rubrique>Le mot culturel</ssous_rubrique>
    			<ssous_rubrique>Un mot sur le futur</ssous_rubrique>
    		</sous_rubrique>
       .
       .
       .
       .

    Une partie du ntraitement PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	$menu=simplexml_load_file('xml/menu.xml');
    	foreach ($menu->rubrique as $rubrique) {
      		echo'
    		<td class="menubar couleur_fond_menu">
          		<a class="menubar" onmouseover="javascript:montre(\'smenu'.$rubrique['id'].'\');" href="index.php?rub='.$rubrique['id'].'">'.$rubrique['nom'].'</a>
     
          		<ul onmouseover="javascript:montre(\'smenu'.$rubrique['id'].'\');" onmouseout= "javascript:montre(\'\');" class="smenu" id="smenu'.$rubrique['id'].'">
            		<li class="prems couleur_text"><a href="index.php?rub='.$rubrique['id'].'">'.$rubrique['nom'].'</a></li>';
       .
       .
       .
       .

  2. #2
    Membre expérimenté
    Avatar de ghostdogpr
    Étudiant
    Inscrit en
    Octobre 2003
    Messages
    198
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2003
    Messages : 198
    Par défaut
    Simplexml_load_file() renvoie un XML en UTF-8. Tu dois utiliser utf8_decode() sur les elements que tu veux afficher correctement.

  3. #3
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Par défaut
    J'ai modifié l'encoding de mon fichier XML en utf-8. J'ai remplacé les accents par des
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <!ENTITY e-accent-aigu "é">
    et j'ai modifié la première ligne de mon code PHP en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $menu = utf8_decode(simplexml_load_file('xml/menu.xml'));
    Pourtant PHP me retourne une erreur come quoi la premiere boucle foreach() n'a pas un argument valide.

    Mon fichier est donc bien accpeté par simple_load_file() mais foreach le refuse.

    Quelqu'un a une idée, je tourne en rond la.

  4. #4
    Membre expérimenté
    Avatar de ghostdogpr
    Étudiant
    Inscrit en
    Octobre 2003
    Messages
    198
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2003
    Messages : 198
    Par défaut
    Et comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       $menu=simplexml_load_file('xml/menu.xml');
       foreach ($menu->rubrique as $rubrique) {
            echo'
          <td class="menubar couleur_fond_menu">
                <a class="menubar" onmouseover="javascript:montre(\'smenu'.utf8_decode($rubrique['id']).'\');" href="index.php?rub='.utf8_decode($rubrique['id']).'">'.utf8_decode($rubrique['nom']).'</a>
     
                <ul onmouseover="javascript:montre(\'smenu'.utf8_decode($rubrique['id']).'\');" onmouseout= "javascript:montre(\'\');" class="smenu" id="smenu'.utf8_decode($rubrique['id']).'">
                  <li class="prems couleur_text"><a href="index.php?rub='.utf8_decode($rubrique['id']).'">'.utf8_decode($rubrique['nom']).'</a></li>';
    :

  5. #5
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Par défaut
    Gagné ca marche! Il faut donc utiliser utf8_decode() localement sur ce qui contient des caractères spéciaux et non pour décoder l'objet xml entier. J'ai mal interprété ta premiére réponse. Merci beaucoup.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Par défaut
    je confirme cette méthode fonctionne à merveille

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 190
    Par défaut
    Bonsoir,
    Moi aussi je confirme. Merci! C'est dommage que ce ne soit pas clairement explicité sur php.net pour la fonction simplexml_load_file... ça m'aurait fait gagner 2 heures... Mais bon, plus on passe de temps et d'énergie à creuser, mieux la petite graine de la connaissance pourra croître! Allez, c'est pas la poésie qui va taper au clavier à ma place... encore merci.

    Gabi (l'ami des tout petits)

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

Discussions similaires

  1. [Encodage] simpleXML : caractères trés spéciaux
    Par drakk dans le forum Langage
    Réponses: 3
    Dernier message: 22/03/2013, 09h28
  2. Où trouver la liste des caractères spéciaux?
    Par gamez dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2003, 17h54
  3. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38
  4. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 16h49
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

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