Flux XML en UTF8 avec les balises CDATA

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é .
 
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");
 
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
 
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