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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.