Page 1 sur 1

Lecture d'un fichier XML et problème de caractères accentués

Posté : 03 avr. 2006, 15:07
par Pat Boens
Bonjour,

J'ai un fichier XML (voir ci-dessous). J'essaye simplement de le lire et d'afficher la valeur des tags trouvés.

Mon problème est que lorsque j'affiche les valeurs des tags et/ou attributs, les caractères accentués ne s'affichent que très mal.

Voilà le fichier XML : newstest.xml

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-15" ?> <LatestNews> <News date="2006-04-02" time="15:30" title="Nouveautés Mars 2006" active="yes" id="GUID_46f47b72-759a-4cba-8263-e79849a0c9cb" author="Pat Boens" > Les nouvelles acquisitions de mars 2006 sont disponibles sur le site. Parcourez-en dès à présent la liste ... </News> <!-- ******************************* --> <News date="2006-02-19" time="20:00" title="Nouveau look" active="yes" id="GUID_5e333af3-f5bb-4365-8791-d6aa639176a7" author="Pat Boens" > Le site a fait peau neuve. Il est préparé pour qu'il puisse faire montre d'interactivité dans un futur proche ... </News> <!-- ******************************* --> </LatestNews>
... Voilà mon code PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

<head>
<title>Test XML</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />

</head>

<body>
<?php
   $doc = DOMDocument::load('newstest.xml');                            /* Load XML file */

   /* Let's first read all the news that are already in the XML file */
   if ( $doc )
   {
      $news = $doc->getElementsByTagName( "News" );                     /* Read News */

      foreach( $news as $theNews )
      {
         $szDate     = $theNews->getAttribute('date');
         $szTime     = $theNews->getAttribute('time');
         $szTitle    = $theNews->getAttribute('title');
         $szID       = $theNews->getAttribute('id');
         $szActive   = $theNews->getAttribute('active');
         $szAuthor   = $theNews->getAttribute('author');

         echo "<h2>Nouvelle - $szDate à $szTime - $szTitle</h2>";

         echo "<p>ID: $szID</p>";
         echo "<p>$theNews->nodeValue</p>";

         echo "<p>par $szAuthor</p>";
      }
   }
   else
   {
      echo "Cannot read XML file";
   }
?>
</body>
</html>

... et voilà le rsultat que j'obtiens (en rouge les problèmes) :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

<head>
<title>Test XML</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />

</head>

<body>

<h2>Nouvelle - 2006-04-02 à 15:30 - Nouveautés Mars 2006</h2><p>ID: GUID_46f47b72-759a-4cba-8263-e79849a0c9cb</p><p>
Les nouvelles acquisitions de mars 2006 sont disponibles sur le site.
Parcourez-en dès à présent la liste ...
</p><p>par Pat Boens</p><h2>Nouvelle - 2006-02-19 à 20:00 - Nouveau look</h2><p>ID: GUID_5e333af3-f5bb-4365-8791-d6aa639176a7</p><p>
Le site a fait peau neuve. Il est préparé pour qu'il puisse
faire montre d'interactivité dans un futur proche ...
</p><p>par Pat Boens</p>
</body>
</html>

Quelqu'un pourrait-il me dire ce qu'il faut faire pour obtenir de simples caractères accentués ?

Merci beaucoup.

Posté : 03 avr. 2006, 16:50
par Cyrano
essaye une chose : affiche ta page dans ton navigateur et ensuite, cliques sur Affichage>Encodage>iso-8859-1 : si c'est la valeur qui est déjà cochée, alors essaye en cliquant sur utf8 ou unicode :

Si tu arrives à avoir un affichage normal, c'est qu'il manque une balise indiquant le charset dans l'entête html de ta page, du genre :

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />

Je vais essayer UTF-8 mais ...

Posté : 03 avr. 2006, 17:13
par Pat Boens
Cyrano,

Je veux bien essayer en UTF-8 mais sache néanmoins que :

1. J'ai bel et bien forcé l'affichage de mon navigateur en iso-8859-15 et cela ne change rien
2. J'ai bel et bien un meta qui indique la nature de l'encodage

Une autre idée ?

merci d'avance.[/list]

Posté : 03 avr. 2006, 17:51
par Cyrano
attention, le format iso-8859-15 contrairement au 8859-1 n'est pas également implémenté dans tous les navigateurs encore.

Pour les autres idées, ne vois pas trop dans l'immédiat :-k

Oui ... mais j'ai essayé avec iso-8859-1 aussi !

Posté : 03 avr. 2006, 20:42
par Pat Boens
Oui ... mais j'ai essayé avec iso-8859-1 aussi ... et là non plus cela ne marche pas.

Posté : 04 avr. 2006, 23:53
par Invité
vu les caractères que tu as dom te renvois de l'utf-8.

je ne connais pas les fonctions dom, mais vu que tu spéificis l'encodage dans ton fichier xml il se peut que dom travail de toute façon en utf-8 ou que ton fichier a été enregistré au format utf-8.

dans les options de la méthode load il y a peut-être moyen de spécifier l'encodage.

sinon utf8_decode:
http://fr.php.net/manual/fr/function.utf8-decode.php