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 23/06/2008, 17h35   #1
Nouveau Membre du Club
 
Inscription : novembre 2005
Messages : 182
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 182
Points : 31
Points : 31
Par défaut [XMLReader] Input is not proper UTF-8

Bonjour,

Citation:
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 :
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 :
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
dafalri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 10h03   #2
Membre actif
 
Avatar de BlackSmith
 
Inscription : mars 2008
Messages : 181
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 181
Points : 186
Points : 186
verifie si ton fichier est bien encodé en utf-8 without bom.
BlackSmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 10h06   #3
Nouveau Membre du Club
 
Inscription : novembre 2005
Messages : 182
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 182
Points : 31
Points : 31
C'est quoi donc "without bom" ?

Je suis en train de me dire qu'il faudrait que je réencode en utf-8 les fichiers que je réceptionne. Par contre je ne sais pas comment ?
dafalri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 10h20   #4
Membre actif
 
Avatar de BlackSmith
 
Inscription : mars 2008
Messages : 181
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 181
Points : 186
Points : 186
Byte-Order Mark (BOM).
C'est un caractère qui ce trouve en debut de fichier et qui à pour habitude de faire planter les scripts php.


Et pour encoder tu peut regarder ceci : http://www.developpez.net/forums/sho...d.php?t=345855
BlackSmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 10h25   #5
Nouveau Membre du Club
 
Inscription : novembre 2005
Messages : 182
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 182
Points : 31
Points : 31
Il faudrait plutôt que je fasse un truc du genre file open, non ?
dafalri est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h20.


 
 
 
 
Partenaires

Hébergement Web