J'ai essayé ça aussi pour les accents mais pas mieux ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part var_dump((string) utf8_decode($xml->{utf8_encode('Réponse_tiers')}));
J'ai essayé ça aussi pour les accents mais pas mieux ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part var_dump((string) utf8_decode($xml->{utf8_encode('Réponse_tiers')}));
dans ta chaine encodage quelle sont les valeur de :
- l'encodage fichier de ton php ?
- l'encodage de l'entête serveur de ton php ?
- le charset HTML de ton php ?
au niveau de ton XML c'est :
- l'encodage de l'entête serveur : utf-8
- le charset HTML : iso-8859-1
Alors,
- L'encodage fichier de mon php : UTF-8 (default_charset dans php.ini)
- L'encodage de l'entête serveur de mon php = iso-8859-1 (Valeur récupérée en affichant la source d'une page de mon serveur)
- Le charset HTML de mon php :
Je ne vois pas comment récupérer le charset HTML de mon PHP.
J'espère ne pas trop répondre à coté de la plaque .... Je m'embrouille.
Désolé et merci pour ta patience
Dans NotePad++ je suis dans Format sur encoder en ANSI.
enfaite c'est plutot l'inserve ca c'est : 'L'encodage fichier de mon php'
le Le charset HTML de mon php c'est ta balise <meta>
en gros
- L'encodage fichier de mon php : notepad++
- L'encodage de l'entête serveur de mon php : firefox, cliquer droit -> information sur la page -> encodage
- Le charset HTML de mon php : la balise <meta> content type
J'ai compris que tu travaillais en ISO-8859-1.Je voudrais modifier le contenu de la balise <Réponse_tiers> mais je n'arrive pas à afficher son contenu.
Pour moi ceci :
Donne cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 header('Content-Type: text/plain; charset=ISO-8859-1') ; $xml = simplexml_load_file('decisions.xml') ; print_r($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) ;
A savoir que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SimpleXMLElement Object ( [0] => Le numéro de l'établissement prescripteur transmis est : 11111111111. Veuillez réexaminer la prescription médicale et retransmettre cette facture en corrigeant l'information. )
- Mon script PHP est écrit en ISO-8859-1
- SimpleXML travaille en UTF-8 : le XML en entrée est converti en UTF-8, le résultat est en UTF-8, d'où les é au lieu de é
- Si tu veux traiter/afficher la balise <Réponse_tiers> il faudra la convertir en ISO-8859-1 avec utf8_decode( )
Réponse à stealth35 :
Je reprends :
- L'encodage fichier de mon php : ANSI
- L'encodage de l'entête serveur de mon php : iso-8859-1
- Le charset HTML de mon php : iso-8859-1
Réponse pour Séb :
Ton code pour moi donne ça :
Merci pour votre aideWarning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0" encoding="ISO-8859-1" .....
Sur le print_r : Trying to get property of non-object
On est bien d'accord que tu obtiens ce msg avec exactement le même XML que celui attaché plus haut et mon script ?Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0" encoding="ISO-8859-1" .....
Si oui va falloir identifié ce qui provoque cette erreur sur ta config.
Dans le fichier XML pour test :
- Supprime le <?xml-stylesheet ?>
- Supprime les entités telles '
Autant pour moi.
Si je créer une nouvelle page PHP, que je mets ton code, j'ai le même retour que toi.
Ce qui change c'est que je mets en plus "file_get_contents" comme c'est un chemin réseau.
Par contre je ne vois pas trop comment la convertir avec utf8_decode( ) alors qu'avant on fait un utf8_encode() ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part $xml = simplexml_load_file(file_get_contents($Way)) ;
Et l'autre souci se situe donc en amont dans mon code .....
Merci
Bon.Si je créer une nouvelle page PHP, que je mets ton code, j'ai le même retour que toi.
Pas besoin de file_get_contents( ) ici, simplexml_load_file( ) se chargeant de récupérer le contenu du fichier.$xml = simplexml_load_file(file_get_contents($Way)) ;
Le utf8_encode( ) sert juste à accéder correctement, dans ton script PHP ISO-8859-1, aux éléments possédant un caractère spécial.Par contre je ne vois pas trop comment la convertir avec utf8_decode( ) alors qu'avant on fait un utf8_encode() ....
Le utf8_decode( ) sert à l'affichage du XML converti en UTF-8 par SimpleXML, ex. pour un affichage au bon format :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 header('Content-Type: text/plain; charset=ISO-8859-1') ; $xml = simplexml_load_file('decisions.xml') ; echo utf8_decode($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) ;Oui.Et l'autre souci se situe donc en amont dans mon code .....
Salut,
Bon, je pense avoir une idée de mon problème en amont du code. Quand le fichier xml est créé, il peut avoir cette structure :
J'avais commencé mon code en parcourant le fichier avec un while eof et un fopen pour l'ouvrir.<Décisions_iris>
....
<Réponse_tiers>
....
</Décisions_iris>
<Décisions_iris">
....
<Réponse_tiers>
....
</Décisions_iris>
Il faut que je puisse lire toutes les balises <Réponse_tiers>
Maintenant je travaille qu'avec SimpleXML car c'est plus propre et aussi suite à vos conseils.
J'essaye de faire un SimpleXMLElement() mais ça plante encore .
Le SimpleXMLElement () children pourait être une solution non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 header('Content-Type: text/plain; charset=ISO-8859-1') ; $xml = simplexml_load_file('decisions.xml') ; $Var = utf8_decode($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) ; $elt = new SimpleXMLElement($Var); foreach ($elt->children() as $Rep) { echo $Rep[utf8_encode('Décisions_iris')]; }
Donne un exemple minimaliste de script PHP + XML qui plantent qu'on puisse tester.
tu vois bien que dans ta chaine d'encodage déjà y'a un soucis, certain sont en utf-8 et d'autre en iso-8859-1, ca aide pas deja
Le script que j'utilise est celui poster plus haut.
Pour le fichier je le mets en pièce jointe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 header('Content-Type: text/plain; charset=ISO-8859-1') ; $xml = simplexml_load_file('decisions.xml') ; $Var = utf8_decode($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) ; $elt = new SimpleXMLElement($Var); foreach ($elt->children() as $Rep) { echo $Rep[utf8_encode('Décisions_iris')]; }
En fait, suivant le contenu de la balise 'Réponse_tiers', je fais ou non une modif de la chaine de caractère.
Lecture de la balise
--> traitement
Si balise suivante, Lecture puis traitement jusqu'à EOF.
Je ne sais pas si je suis clair.
Merci beaucoup en tout cas !!
les & ne sont pas echapés, en les corrigeant je peu juste faire ca
ca sert a rien de charger 2 fois ton xml, et pourquoi faire un utf8_decode alors que t'es en iso ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $xml = simplexml_load_file('decisions_2.xml'); foreach($xml->Décisions_iris as $iris) { print_r($iris); }
moi je suis tout en utf-8 et ca marche
Oui, il y a 2 & incorrects qui se balladent tout seuls, ex. :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <Num_facture>111111111111&</Num_facture>
Bonjour,
Oui, il y a des & dans la valeur des balises mais c'est une erreur de manip de ma part. Même quand il n'y sont pas, ça ne fonctionne pas.
Je pense que je dois faire une erreur de synthaxe
ça me renvoie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $xml = simplexml_load_file('decisions_2.xml') ; foreach (utf8_decode($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) as $iris) { echo($iris); }
Voilà
Code : Sélectionner tout - Visualiser dans une fenêtre à part Warning: Invalid argument supplied for foreach()
Quand mes balises me sont renvoyées, elles le sont sous forme d'objet donc je n'ai pas la possibilité de les modifier une par une lors de la lecture. On peut les mettre dans un tableau ?
Merci pour voter aide.
Partager