Flux XML en UTF8 avec les balises CDATA

WRInaute discret
Bonjour

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


Code:
<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:
$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é .
 
WRInaute impliqué
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");
 
WRInaute discret
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:
$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:
$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
 
WRInaute discret
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
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut