Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML
XML Forum d'entraide sur XML avec PHP. Exemples : SimpleXML, OpenXML... Avant de poster -> FAQ XML, Cours XML et Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2007, 17h45   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 18
Points : 4
Points : 4
Par défaut [EXPAT] embrouille de formats utf8 & co

bonjour,
j'ai récupéré un script PHP pour parser un gros fichier xml (10Mo, 50.000 lignes).
Je l'ai modifié pour qu'il me permette d'entrer des parties définies dans un table mySQL.
j'ai un problème car le fichier est défini en UTF-8 et quoi que je fasse, la gestion du format est mauvaise.

mon fichier contient des infos sur les communes de France.

j'envoie le fichier à
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
function new_xml_parser($file){
	global $parser_file;
	$xml_parser = xml_parser_create(); //création du parseur
	xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); //Activation du respect de la casse du nom des éléments XML
	xml_set_element_handler($xml_parser, "startElement", "endElement"); //Déclaration des fonctions à rattacher au gestionnaire d'événement
	xml_set_character_data_handler($xml_parser, "characterData");
	xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
	if (!($fp = @fopen($file, "r"))) return FALSE; //Ouverture du fichier
	// Transformation du parseur en un tableau
	if (!is_array($parser_file)) settype($parser_file, "array");
	$parser_file[$xml_parser] = $file;
	return array($xml_parser, $fp);
}
la gestion des data est faite par :
Code :
1
2
3
4
5
6
7
// Fonction associée à l’événement données textuelles
function characterData($parser, $data){
	global $globaldata;
	$globaldata = $data;
    // iconv('UTF-8', 'ISO-8859-1//IGNORE',)
    // ;mb_convert_encoding(, 'ISO-8859-1', 'UTF-8')
}
je rentre globaldata dans un tableau associatif pour chaque commune et lorsque la balise de fin de commune apparaît, je veux rentrer les infos dans la base. Pour le moment je l'écris en HTML.

Un exemple de mon problème est la ville 'Montluçon' : me donne :
- 'çon' si j'écris $data tel quel en spécifiant la page HTML en tant qu'UTF8
- 'çon' si j'écris tel quel avec un HTML ISO-8859-1
- ' çon' si je transcrit en ISO-8859-1 avec la fonction iconv en HTML ISO-8859-1
- idem pour une conversion avec mb_convert_encoding

alors je comprends rien.
pierrickg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2007, 00h33   #2
Invité de passage
 
Inscription : juillet 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 18
Points : 4
Points : 4
Par défaut bon ça y est

en cherchant à améliorer mon parseur, je suis passé de la veille méthode PHP4 à un DOMXML en PHP5 et là plus aucun problème de'affichage des données brutes ou avec un changement de format.
Ca fait un petit moment que je me demandais s'il n'y avait pas un problème du côté des fonctions d'extraction que j'utilisais... Ca doit être ça.

excusez d'avoir trouvé un moyen tout seul et de vous avoir demandé votre collaboration pour rien.

Bonne nuit
pierrickg est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h28.


 
 
 
 
Partenaires

Hébergement Web