Page 1 sur 1

Prpblème avec SimpleXML

Posté : 21 oct. 2009, 18:12
par jay64
Bonjour,

J'ai une page (http://www.sportwif.com/epreuves.php?epreuve=9 par exemple) qui aléatoirement me génère l'erreur suivante :
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 49: parser error : Entity 'rsaquo' not defined in /homepages/26/d297337207/htdocs/epreuves.php on line 289
Pour info, j'ai un bout de code qui récupère du xml de l'API twitter :
$url = "http://twitter.com/statuses/user_timeline.xml?screen_name=".$LoginTwitter; //ex : "http://twitter.com/statuses/user_timeline.xml?screen_name=aurebond"

$ch = curl_init();
$timeout = 0; // set <strong class="highlight">to</strong> zero for no timeout
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$result = curl_exec($ch);
curl_close($ch);
						
$xml = simplexml_load_string($result); //=>ma ligne 289
Ce n'est absolument pas régulier et je ne sais pas identifier et donc résoudre mon problème.

Pouvez-vous m'aider ?

Merci !

Jérôme

Re: Prpblème avec SimpleXML

Posté : 21 oct. 2009, 18:53
par Calimero
Bonjour,

Le parseur xml de la fonction simplexml_load_string a rencontré une entité xml inconnue ( &rsaquo; ) et il te le signale tout simplement.

De deux choses l'une, soit tu supprimes le message d'avertissement, soit tu fais en sorte de nettoyer le contenu xml avant de l'injecter dans la fonction simplexml_load_string() pour ne plus déclencher le warning.

Re: Prpblème avec SimpleXML

Posté : 22 oct. 2009, 09:01
par jay64
Merci Caliméro pour cette réponse,

Peux-tu me guider un peu plus sur la façon de mettre l'une ou l'autre de tes solutions ?
Désactiver les avertissements, pourquoi pas, mais j'aimerais autant faire un brin de nettoyage de ma chaine avant de l'injecter. Je m'y prends comment ?

Merci !

Jérôme

Re: Prpblème avec SimpleXML

Posté : 22 oct. 2009, 11:31
par Calimero
C'est très simple dans les deux cas :

- Pour supprimer les avertissements (celui-là fait partie à mon avis de ceux que tu peux ignorer, en imaginant que tu n'en as pas d'autres et que les contrôles sont bien faits en amont hein), il te suffit de rajouter un @ devant l'appel de la fonction simplexml_load_string. Ainsi elle ne "parlera" plus.

- Pour nettoyer le xml avant injection dans la fonction, c'est là aussi très simple, un str_replace() fera l'affaire. Il te restera juste à choisir par quoi tu veux remplacer cette entité (dans le doute je la supprimerais, en la remplaçant par une chaîne vide donc).

Re: Prpblème avec SimpleXML

Posté : 22 oct. 2009, 11:40
par jojolapine
Juste pour infos, l'entité en question correspond à un guillemet simple de type "chevron" ( http://fr.wikipedia.org/wiki/Guillemet# ... formatique )
Du coup est-ce que le remplacer par une chaine vide est judicieux...?

Re: Prpblème avec SimpleXML

Posté : 22 oct. 2009, 11:48
par jay64
oui, je ne sais pas trop quoi penser de tout ça ... :roll:

Re: Prpblème avec SimpleXML

Posté : 22 oct. 2009, 16:41
par Calimero
Solution 1 : supprimer les messages d'avertissement.
$xml = @simplexml_load_string($result);
Solution 2 : remplacer l'entité par "autre_chose"
$xml = str_replace('&rsaquo;','autre_chose',$xml);
$xml = simplexml_load_string($result);
Et je laisse jojolapine te proposer un "autre_chose" qui lui convienne ;)

Re: Prpblème avec SimpleXML

Posté : 23 oct. 2009, 14:50
par jojolapine
Essaye de remplacer cet élément par quelque chose de reconnaissable ("__DEBUG__")
pour voir à quel endroit il se situe dans tes données, et vérifier sur tweeter directement à quoi correspond le caractère...

Edit: visiblement tu n'es pas le seul à avoir le problème: http://www.google.fr/search?client=oper ... 8&oe=utf-8
Tout pleins de sites sont indexés avec des erreurs... :)