Page 1 sur 1

simplexml, Problème d'encodage xml

Posté : 20 déc. 2006, 09:42
par thedavix
Bonjour à vous,

J'ai un problème d'encodage de mes accents dans les fichiers xml que je récupère avec simplexml (php 5), j'ai cru que c'était mon fichier alors j'ai repris un exemple tout bête sur internet et ça me fait toujours la même chose.

voici mon fichier xml

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-15"?> <library> <shelf id="fiction"> <book> <title>Of Mice and Men é </title> <author>John Steinbeck</author> </book> <book> <title>Harry Potter and the Philosopher's Stone</title> <author>J.K. Rowling</author> </book> </shelf> </library>
Voici le code php
 <?php
 $library = simplexml_load_file('test.xml');
 foreach ($library->shelf as $shelf) {
     printf("Shelf %s\n", $shelf['id']);
     foreach ($shelf->book as $book) {
         printf("Title: %s\n", $book->title);
         
         printf("Author: %s\n", $book->author);
         print '<br>';
     }
 }
 ?>
et l'output est toujours
Shelf fiction Title: Of Mice and Men é Author: John Steinbeck
Title: Harry Potter and the Philosopher's Stone Author: J.K. Rowling
Comme vous le voyez l'accent ne sors pas.. j'ai essayé plusieurs type d'encodage.. plusieurs éditeurs de textes (notepad, pspad, zend)

Quand j'accède directement au fichier xml par le navigateur j'ai l'accent qui s'affiche correctement, donc je pense pas que ça vienne du fichier xml,
mais bon en tout cas je n'arrive pas à trouver ou est le problème..

Est ce que qqun pourrait m'aider? :roll:


Je vous remercie d'avance


Davix :lol:

Posté : 20 déc. 2006, 09:58
par Cyrano
Ces caractères, c'est de l'utf-8 affiché en iso-8859-1.

Posté : 20 déc. 2006, 10:12
par thedavix
Oui je sais, mais le problème c'est que j'essaye par tous les moyens de changer l'encodage dans zend aux 2 endroits possibles j'ai même recréer les fichiers et ca ne marche pas :cry:

Comment faites vous?
Vous faites un fichier XML en uft et vous faites des utf_decode avant d'imprimer? ou toute la page en utf?

Posté : 20 déc. 2006, 10:57
par Cyrano
... j'essaye par tous les moyens de changer l'encodage dans zend ...
Tu parles de Zend Studio ?

Posté : 20 déc. 2006, 11:02
par Xenon_54
Quel encodage est utilisé par ton éditeur?

Je remarque ceci dans le haut de ton fichier xml:

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-15"?>
S'il n'est pas encodé en iso-8859-15, il faudra alors mettre utf-8 non?

De plus, tu peux vérifier l'encodage par défaut d'apache (si tu l'utilises) afin de t'assurer qu'il est bel et bien utf-8. Si c'est pas le cas, modifie l'entête HTTP ainsi pour forcer l'encodage:
<?php
header('Content-Type: text/html; charset=utf-8');
?>

Posté : 20 déc. 2006, 12:00
par thedavix
Tu parles de Zend Studio ?
Oui

Posté : 20 déc. 2006, 12:09
par Cyrano
Alors sous ZDE, Outils>Personnalisation, onglet "Poste de travail" dans la partie "Apparence", tu devrais avoir : Encodage ISO_8859-1

Tu parles de deux endroits disponibles, je ne vois pas trop quel est le second :-k

Autre problème, la norme ISO-8859-15 est encore mal implémentée ou n'est pas implémentée du tout dans certains navigateurs, essaye avec ISO-8859-1

Posté : 20 déc. 2006, 13:49
par thedavix
Le second est dans le paramètre du projet (si tu en crée evidemment) la aussi tu peux régler l'encodage :) sinon il prend par défault
ok je vais essayer avec iso-8859-1

Je te tiens au courant

Posté : 20 déc. 2006, 14:23
par sadeq
Le problème n'est pas au niveau de la page XML ni au niveau de la lecture par simple_xml.
Le problème est au niveau de l'echo de PHP qui affiche le résultat dans un navigateur sans déclarer explicitement l'encodage.

Pour résoudre ton problème il faut déclarer dans l'entête http le type d'encodage "UTF-8" par le code PHP qui affiche. Comme ça:
<?php 
 header('Content-Type: text/html; charset=utf-8');
 $library = simplexml_load_file('test2.xml'); 
 foreach ($library->shelf as $shelf) { 
     printf("Shelf %s\n", $shelf['id']); 
     foreach ($shelf->book as $book) { 
         printf("Title: %s\n", $book->title); 
          
         printf("Author: %s\n", $book->author); 
         print '<br>'; 
     } 
 } 
 ?>