Bonjour,

Warning: XMLReader::read() [function.XMLReader-read]: cf2.xml:14: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xE7 0x61 0x69 0x73 in script.php on line 220
Voilà le message d'erreur que j'obtiens lorsque je joue mon script.
J'upload un fichier xml (parfois un rss à l'origine) puis je le parse et l'insère dans ma bdd.

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
69
70
71
$tblPart = new sqlTablePartenaire( 'R' );
if ( $partTab = $tblPart->getOne( 'nom = "'. $partenaire .'"', 'id_partenaire, priorite, nom' )){
	foreach( $taratatarss as $k => $v ){
		$fileName = CallFactory::getInstance()->uploadXml( $partenaire .'-'. $k, $v['url'] , true );
		echo $fileName.'<br />';
		parseXml( $partTab, $fileName, $v['categorie'], $v['type'] );
}	}
else
	throw new exception( '*** partenaire non trouvé : '. $partenaire );
 
 
function parseXml( $partTab, $file, $cat, $sscat) {
	// Pour parser un gros doc avec Expand et SimpleXml
	$reader = new XMLReader(); //plus rapide et moins gourmand en mémoire
	$reader->open( $file );
	while ($reader->read()) {
  	switch ($reader->nodeType) {
      case (XMLREADER::ELEMENT):
	      if ($reader->localName == 'item') {
	        $node = $reader->expand();
	        $dom = new DomDocument();
	        $n = $dom->importNode($node,true);
	        $dom->appendChild($n);
	        $movie = simplexml_import_dom($n); //on passe le relais à SimpleXml (plus simple ;-)
					//on convertit les "tags:name" en "name"
	        $tmp = $movie->asXML();
	        $tmp = ereg_replace( '<[[:alpha:]]+:','<', $tmp);
	        $tmp = ereg_replace( '</[[:alpha:]]+:','</', $tmp);
	        //echo $tmp.'<hr>';
	        //on recolle le tout dans le simplexml
	        $movie = simplexml_load_string( $tmp ); //on passe le relais à SimpleXml (plus simple ;-)
					if ( $movie->credit != 'mytaratata' )
						continue;
					$du = (string)$movie->pubDate;
					$filmTab = array(
						//'id' => (string)$movie->guid,
						'categorie' => $cat, //'RSS'
						'type' => $sscat, //utf8_decode((string)$movie->FPD_SS_CAT_PARENT->CAT_TITRE ),
						'annee' => date( 'Y', strtotime($du)),
						'duree' => enMinute((string)$movie->duration),
						'titre' => utf8_decode((string)$movie->title),
						'diffusion' => gmstrftime( '%Y-%m-%d %H:%M:%S', strtotime($du) ),
						//'titre2' => utf8_decode((string)$movie->FPD_TITRE2),
						'photo' => (string)$movie->thumbnail,
						'plot' => extractPLot( utf8_decode((string)$movie->description) ),
						'directors' => array(),
						'actors' => array(),
						'extraits' => array(),
						'motcles' => array(),
						'offers' => array()
					);
 
					//<media:category>foot</media:category> convertit en <category>foot</category>
					if ( is_object( $movie->category )){
						foreach ( $movie->category AS $motcle )
							$filmTab['motcles'][] = utf8_decode( trim( (string)$motcle ));
					}
 
					$filmTab['offers'][] = array(
						'achatlocation' => 'Gratuit Taratata',
						'prix' => '0.00',
						'langue' => 'Francais',
						'url' => (string)$movie->link,
						'du' => gmstrftime( '%Y-%m-%d %H:%M:%S', strtotime($du) )
						//'au' => (string)$movie->FPD_END_DATE
					);
					//CallFactory::getInstance()->updateProgramme( $partTab, $filmTab, true );
					echo '<pre>'; var_dump( $filmTab );	echo '</pre>';
				}
				break;
}	}	}
Le message d'erreur vient de la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
while ($reader->read()) {
J'ai essayé des tas de trucs lus ça et là dans les différents topics (encodage du $fileName par exemple en utf-8) et rien n'y a fait.

Si une bonne âme charitable peut m'aiguiller sur quelque chose que je n'aurais pas vu