Bonjour,

J'ai un script qui fonctionnait bien en PHP4.
Je viens de passer en PHP5 et rien ne va plus !

c'est simplement un script qui parse un fichier xml
et remonte les infos lues en base.
le fichier xml est simple :

Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="ISO-8859-1" ?> 
 <racine>
  <MODEREG>
  <code-reg>B30FM05</code-reg> 
  <libelle>Billet à ordre à 30 jours le 5</libelle> 
  </MODEREG>
  <MODEREG>
  <code-reg>B90J</code-reg> 
  <libelle>Billet à ordre à 90 jours</libelle> 
  </MODEREG>
  <MODEREG>
  <code-reg>B90LE10</code-reg> 
  <libelle>Billet à 90j fin mois le 10</libelle> 
  </MODEREG>
 </racine>


Depuis que je suis passée en PHP5, les libellés que je récupère sont tronqués.
Par exemple pour : <libelle>Billet à ordre à 30 jours le 5</libelle>
Je ne récupère que : à ordre à 30 jours le 5
C'est à dire que tout ce qui est avant le 1er caractère accentué est tronqué.

Le script qui parse :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//function appelé au début de chaque balise du fichier XML
function gestionnaire_debut($analyseur, $nom, $attribut){
	global $cont;
	global $nb; 
	$balise=$nom;   
	$nb++;
}
 
//function appelé à la fin de chaque balise du fichier XML
function gestionnaire_fin($analyseur, $nom){
	if($nom=="MODEREG")
		insert_base();
	global $balise;
	$balise=$nom;
	global $nb;
	$nb--;
}
 
//function appelé lorsque des DATA sont trouvés
function gestionnaire_texte($analyseur, $texte){
	global $texteavant;	
	global $balise;
	global $nb;
	global $codetypeannexe,$typeannexe;
	switch ($balise) { 
	    case "CODE-REG":
		$codetypeannexe=$texteavant;
		break;
	    case "LIBELLE":
		$typeannexe=$texteavant;
		break;
	}
	$balise="";
	$texteavant = $texte;
}
 
//insertion dans la base quand datas trouvées
function insert_base(){
	global $codeclient;
	global $codeadresse;
	global $balise;
	global $codetypeannexe,$typeannexe;
	global $table;
	$typeannexe=eregi_replace("'","''",$typeannexe);
	$req = "INSERT INTO $table (CODE_MODE_REGLEMENT , MODE_REGLEMENT) VALUES ('$codetypeannexe','$typeannexe')";
	$ajout=mssql_query("$req"); 
	if (!$ajout) {echo "$req <br><br>";}
	$cont++;
}
 
$analyseur_xml = xml_parser_create("ISO-8859-1");
 
xml_set_element_handler($analyseur_xml, "gestionnaire_debut", "gestionnaire_fin");
xml_set_character_data_handler($analyseur_xml, "gestionnaire_texte");
 
if (!($id_fichier = fopen($fichier, "r"))){ die("Impossible d'ouvrir le fichier XML !"); }
while ($donnee = fread($id_fichier, filesize($fichier))) { //echo $donnee."<br>";
 
	if (!xml_parse($analyseur_xml, $donnee, feof($id_fichier))) {
			die(sprintf("Une erreur XML %s s'est produite "
                        . "à la ligne %d et à la colonne %d.",
                    xml_error_string(xml_get_error_code($analyseur_xml)),
                    xml_get_current_line_number($analyseur_xml),
                    xml_get_current_column_number($analyseur_xml)));
	}
}
 
xml_parser_free($analyseur_xml);

C'est vrai que je ne comprends pas grand chose aux parseurs (!) mais je cherche depuis un moment à comprendre et je ne trouve pas. J'ai lu que c'était en effet un problème qui est dû au passage à PHP5, mais je ne comprends pas comment résoudre.

Est-ce que je dois utiliser d'autres fonctions ?
J'ai trouvé des exemples avec DOM mais je ne comprends pas ces exemples, ça ne semble jamais correspondre (ni de près, ni de loin) à mon cas de figure !!
Je ne sais même plus par où je dois commencer pour résoudre mon souci !

Est-ce que quelqu'un peut m'orienter ??

merci d'avance