simplexml, Problème d'encodage xml

Eléphanteau du PHP | 10 Messages

20 déc. 2006, 09:42

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:

Mammouth du PHP | 19672 Messages

20 déc. 2006, 09:58

Ces caractères, c'est de l'utf-8 affiché en iso-8859-1.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

20 déc. 2006, 10:12

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?

Mammouth du PHP | 19672 Messages

20 déc. 2006, 10:57

... j'essaye par tous les moyens de changer l'encodage dans zend ...
Tu parles de Zend Studio ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1885 Messages

20 déc. 2006, 11:02

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');
?>
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphanteau du PHP | 10 Messages

20 déc. 2006, 12:00

Tu parles de Zend Studio ?
Oui

Mammouth du PHP | 19672 Messages

20 déc. 2006, 12:09

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

20 déc. 2006, 13:49

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

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

20 déc. 2006, 14:23

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>'; 
     } 
 } 
 ?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène