Flux XML en UTF8 avec les balises CDATA

max6
WRInaute discret
WRInaute discret
 
Messages: 168
Inscription: 18 Mai 2003

Flux XML en UTF8 avec les balises CDATA

Message le Mer Mar 21, 2007 13:15

Bonjour

Je rencontre un problème avec un flux XML qui se décompose comme ceci :


Code: Tout sélectionner
<hotel>
      <hotel_id>11601</hotel_id>
      <hotel_nom><![CDATA[FIRST HOTEL AALBORG]]></hotel_nom>
      <cp>21000</cp>
      <departement_id>0</departement_id>
      <departement></departement>
      <ville_id>1</ville_id>
      <ville>Aalborg</ville>
      <pays>Danemark</pays>
      <pays_id>1</pays_id>
      <description><![CDATA[L'h&ocirc;tel First d'Aalborg se trouve &agrave; seulement 7 km de l'a&eacute;roport, &agrave; 1 km de la gare et a une distance de marche de magasins, des attractions touristiques et des restaurants. Il compte 155 chambres &eacute;quip&eacute;es de salles de bains priv&eacute;es, et 12 suites avec ]]></description>
      <etoiles>4</etoiles>
      <chambres>0</chambres>
      <image>http://www.hotelclub.net/common/imagegallery/HotelImage.aspx?hid=10844</image>
      <chaine_id>0</chaine_id>
      <chaine></chaine>
      <chaine_image>http://img.webmastravel.net/hotel/0.gif</chaine_image>
      <voyagistes>
         <offre>
            <voyagiste_id>6</voyagiste_id>
            <voyagiste>HotelClub</voyagiste>
            <voyagiste_image>http://img.webmastravel.net/voyagistes/6.gif</voyagiste_image>
            <url>http://mb.webmastravel.net/hgo2.php?a=11601&b=6&c=1047</url>
            <prix>0</prix>
         </offre>
      </voyagistes>
   </hotel>



Je le lis comme cela :


Code: Tout sélectionner
$bibliotheque = simplexml_load_file('wmt_hotels.xml');
foreach ($bibliotheque->hotel as $hotel)
{
$hotel_id = utf8_decode($hotel->hotel_id);
$hotel_nom = utf8_decode($hotel->hotel_nom);
$cp = utf8_decode($hotel->cp);
$departement = utf8_decode($hotel->departement);
$ville = utf8_decode($hotel->ville);
$pays = utf8_decode($hotel->pays);
$description = utf8_decode($hotel->description);
$etoiles = utf8_decode($hotel->etoiles);
$chambres = utf8_decode($hotel->chambres);
$image = utf8_decode($hotel->image);
$chaine = utf8_decode($hotel->chaine);


$hotel_id = mysql_real_escape_string($hotel_id);
$hotel_nom = mysql_real_escape_string($hotel_nom);
$cp = mysql_real_escape_string($cp);
$departement = mysql_real_escape_string($departement);
$ville = mysql_real_escape_string($ville);
$pays = mysql_real_escape_string($pays);
$description = mysql_real_escape_string($description);
$etoiles = mysql_real_escape_string($etoiles);
$chambres = mysql_real_escape_string($chambres);
$image = mysql_real_escape_string($image);
$chaine = mysql_real_escape_string($chaine);

.....



Mais voila lors de l'insertion dans mysql (sous wamp) le problème des accents n'est pas réglé du tout .
Du moins ca fonctionne tant que les éléments du flux ne sont pas dans les balises CDATA .

J'ai tt essayé mais rien a faire , c'est comme si UTF8_decode etait ignoré .

Tilt
WRInaute impliqué
WRInaute impliqué
 
Messages: 858
Inscription: 26 Mar 2005

Message le Mer Mar 21, 2007 13:39

Dans ton exemple, les accents sont html encodés. A ta place au lieu de utf8_decode, je ferais html_entity_decode,
d'autant que cette fonction permet de spécifier un encodage:
ex: html_entity_decode($str,ENT_QUOTES,"ISO-8859-1");

max6
WRInaute discret
WRInaute discret
 
Messages: 168
Inscription: 18 Mai 2003

Message le Mer Mar 21, 2007 15:48

Eh bien merci mais ca ne fonctionne pas malgré tout .

J'ai fais un test , j'ai crée un fichier vierge et j'ai mis dedans :

Code: Tout sélectionner
$a = "L'h&ocirc;tel";
echo html_entity_decode($a);
Affiche L'hôtel


Tout va bien donc .

Mais quand j'intégre ca a mon code XML comme ceci :

Code: Tout sélectionner
$hotel_id = html_entity_decode($hotel_id,ENT_QUOTES,"ISO-8859-1");
$hotel_nom = html_entity_decode($hotel_nom,ENT_QUOTES,"ISO-8859-1");
$cp = html_entity_decode($cp,ENT_QUOTES,"ISO-8859-1");
$departement = html_entity_decode($departement,ENT_QUOTES,"ISO-8859-1");
$ville = html_entity_decode($ville,ENT_QUOTES,"ISO-8859-1");
$pays = html_entity_decode($pays,ENT_QUOTES,"ISO-8859-1");
$description = html_entity_decode($description,ENT_QUOTES,"ISO-8859-1");
$etoiles = html_entity_decode($etoiles,ENT_QUOTES,"ISO-8859-1");
$chambres = html_entity_decode($chambres,ENT_QUOTES,"ISO-8859-1");
$image = html_entity_decode($image,ENT_QUOTES,"ISO-8859-1");
$chaine = html_entity_decode($chaine,ENT_QUOTES,"ISO-8859-1");


Et bien ca ne change rien , seul les champs qui ne sont pas dans CDATA sont traités , Les champs contenu dans CDATA ignore cette fonction sauf
mysql_real_escape_string qui est utilisé .

J'ai du mal a voir ce qui cloche

max6
WRInaute discret
WRInaute discret
 
Messages: 168
Inscription: 18 Mai 2003

Message le Mer Mar 21, 2007 16:05

Alors en fait je viens de remarquer que si j'affiche les enresitrement les caractéres sont bien convertit mais pas quand j'insère dans mysql sous wamp

Etrange


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités