Parser PHP probleme UTF-ISO accent

Résolu/Fermé
Rhumiz - 28 juin 2012 à 14:04
 Rhumiz - 28 juin 2012 à 14:45
Bonjour,


Petite présentation, je suis informaticien dans les systèmes de supervision et je m'adonne depuis quelque jour à un petit projet perso en PHP. J'ai des petites bases, mais la j'avoue avoir du mal :x
J'utilise un Parser PHP pour découper plusieurs flux rss (xml) et enrichir une bdd MySQL.

Mon problème est que certain flux sont en UTF-8 et d'autres en iso-8859-1, du coup dans certains cas les caractères avec accents sont insérés correctement et dans d'autres cas non : /
J'ai trouvé une partie de solution sur CCM avec l'utilisation de la fonction utf8_decode($chaine), qui converti correctement les caractères UTF en iso.

Cependant les flux en iso se retrouver avec des "?" à la place des caractères avec accents, alors qu'avant c'était parfait ...
Voici mon parser PHP :

function lit_rss($fichier,$objets) {
	// on lit tout le fichier
	if($chaine = @implode("",@file($fichier[0]))) {
		// on découpe la chaine obtenue en items
		$tmp = preg_split("/<\/?"."item".">/",utf8_decode($chaine));

		// pour chaque item
		for($i=1;$i<sizeof($tmp)-1;$i+=2)
			// on lit chaque objet de l'item
			foreach($objets as $objet) {

				// on découpe la chaine pour obtenir le contenu de l'objet
				$tmp2 = preg_split("/<\/?".$objet.">/",$tmp[$i]);

				// on ajoute le contenu de l'objet au tableau resultat
				$resultat[$i-1][] = @$tmp2[1];
			}

		// on retourne le tableau resultat
		return $resultat;
	}
}

Voici les différentes premières lignes de mes fichiers xml :
<?xml version="1.0" encoding="UTF-8"?>
<?xml version='1.0' encoding='iso-8859-1'?>

En fonction du type d'encoding je souhaiterai utiliser la fonction utf8_decode() ou pas.
Si quelqu'un peu me transmettre une fonction permettant de vérifier l'encoding du fichier avant de lancer le parser ça me ferait très plaisir :o)

Merci d'avance à vous tous
A voir également:

1 réponse

Je m'auto répond :D

1] j'ouvre le fichier xml
2] j'extrais les 50premiers octets
3] conditionnelle recherche de UTF ou utf
4] exécution de la bonne procédure (bon la ça fait un echo, mais on se comprend ^^)

	### Lire chaque ligne du résultat SQL ###
	while($un_flux = mysql_fetch_row($lst_flux))
	{
	
	echo "$un_flux[0] <br>";
	$f = fopen("$un_flux[0]","r");
	$ligne = fread($f, 50);
	$chaineMAJ = "UTF";
	$chaineMIN = "utf";	
	echo "$ligne <br>";
	if ((!strpos($ligne, $chaineMAJ)) && (!strpos($ligne, $chaineMIN)))
	{
		echo "UTF non trouvé <br>";
	}
	else
	{
		echo "===============>>> Ce fichier est en UTF <br>";
	}

	fclose($f);
	}


Merci merci !
0