IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[XML] [XMLReader] Input is not proper UTF-8


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut [XML] [XMLReader] Input is not proper UTF-8
    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

  2. #2
    Membre actif Avatar de BlackSmith
    Inscrit en
    Mars 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2008
    Messages : 181
    Points : 207
    Points
    207
    Par défaut
    verifie si ton fichier est bien encodé en utf-8 without bom.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut
    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 ?

  4. #4
    Membre actif Avatar de BlackSmith
    Inscrit en
    Mars 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2008
    Messages : 181
    Points : 207
    Points
    207
    Par défaut
    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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 182
    Points : 64
    Points
    64
    Par défaut
    Il faudrait plutôt que je fasse un truc du genre file open, non ?

Discussions similaires

  1. ORA-00933: SQL command not properly ended
    Par yupa dans le forum Oracle
    Réponses: 3
    Dernier message: 29/03/2022, 15h12
  2. ORA-01756: quoted string not properly terminated
    Par hottnikks_79 dans le forum SQL
    Réponses: 14
    Dernier message: 22/05/2007, 12h02
  3. [XML] [XMLReader] xml quand tu nous tiens
    Par pimpmyride dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/05/2007, 20h28
  4. [XML] xmlreader namespace XMLDocument
    Par Oxy42 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 07/12/2006, 17h45
  5. xhtml ->xml xsl:attribute name+not valid
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 14/06/2005, 07h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo