Bonjour,
Je me perds avec ce problème là:
Voici le lien de la page xml à parser: http://www.lavoixdunord.fr/Services/Fils_RSS/Locales/Lille/index.xml
Voici le charabiat que j'obtiens:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" href="style/stylerss.css" type="text/css" />


</head>
<body>

<ul>
      <li>
        <a href=http://www.lavoixdunord.fr/Locales/Cambrai/actualite/Cambrai/2009/06/18/article_des-idees-pour-un-week-end-de-bien-etre.shtml?xtor=RSS-2><b>Des id&eacute;es pour un week-end de bien-&ecirc;tre et de d&eacute;couverte</b></a> <br />

        Envie de profiter du week-end pour vous d&amp;#233;payser&amp;#160;? Parmi toutes les manifestations organis&amp;#233;es ce week-end (&amp;#224; commencer par celles destin&amp;#233;es &amp;#224; f&amp;#234;ter les papas ou la musique), voici trois de celles qu&amp;#39;il ne faudra pas manquer&amp;#160;: l&amp;#39;ind&amp;#233;modable Tracto r&amp;#233;tro, &amp;#224; Escaudoeuvres ; le rafra&amp;#238;chissant Salon de la bi&amp;#232;re, &amp;#224; Vendegies-sur-&amp;#201;cail-lon, et les r&amp;#233;jouissants feux de la Saint-Jean &amp;#224; l&amp;#39;Arch&amp;#233;o&amp;#39;site des Rues-des-Vignes.	
      </li>

      
      <li>
        <a href=http://www.lavoixdunord.fr/Locales/Cambrai/actualite/Cambrai/2009/06/18/article_communiquez-vos-infos-cambrai-lavoixduno.shtml?xtor=RSS-2><b>Communiquez vos infos cambrai@lavoixdunord.fr</b></a> <br />
        &lt;P&gt;&lt;p&gt;FEUX DE LA SAINT-JEAN Clary.- Action Jeunes organise samedi, les feux de la Saint-Jean, au stade, &amp;#224; partir de 20&amp;#160;h. Espace couvert pour le repas.	
      </li> etc etc etc


On constate des P&gt; et des ;#224; entre autres.
Le document xml, quand on affiche le code source, il affiche bien ces hyroglifs sauf les P&gt;!
Je cherche à convertir le document pour qu'il soit lisible dans ma page en php et bien sur encodée en UTF8!

Et enfin voici mon code simple pour parser:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8 " />
<link rel="stylesheet" href="style/stylerss.css" type="text/css" />


</head>
<body>
<?php
function lire_rss($url,$nbr=10)
{
  $tout.='<ul>';
  $xml = simplexml_load_file($url) ;
  
  foreach($xml->channel->item as $item) {
    $i++;
    if($i<=$nbr){
    $txt=utf8_decode($item->description); $lien=utf8_decode($item->link); $titre=utf8_decode($item->title);
      $tout.='
      <li>
        <a href='.htmlentities($lien).'><b>'.htmlentities($titre).'</b></a> <br />
        '.htmlentities($txt).'
      </li>
      ';
    }
  }
  $tout.='</ul>';
  
  return $tout;
}
?>

<?php echo lire_rss("http://www.lavoixdunord.fr/Services/Fils_RSS/Locales/Cambrai/index.xml",10) ?>

</body>
</html>


Pour mieux comprendre, voici le résultat:http://www.rumegiesmeteo.fr/TESTRSS.php
Si quelqu'un pouvait m'aider à me mettre sur le chemin pour trouver la solution, ce serait sympa car j'y perd mon latin!

J'ai déjà lu pas mal de truc, mais je n'en sort pas! Smiley murf
Merci
Modifié par flighty (18 Jun 2009 - 22:24)
Salut,

Premier problème
SimpleXML convertit ton XML en utf-8 automatiquement. Tu as l'air au courant (c'est pas le cas de tout le monde, la faute à la doc) puisque tu repasses le XML en latin-1 (utf8_decode()). Mais pourquoi ???

Deuxième problème
Tu as des entités HTML que tu souhaites décoder. La fonction pour ça c'est html_entity_decode(), pas htmlentities(), qui fait le contraire.

Conclusion
La seule chose que tu aies à faire, c'est de convertir tes entités HTML (en respectant bien le charset par contre). Si on remet ton code à plat, ça donne donc ça :
function lire_rss($url, $nbr=10) {
    $xml = simplexml_load_file($url);
    $items = $xml->channel->item;
    $lis = '';
    
    for ($i=0, $l=min($nbr, count($items)); $i<$l; $i++) {
        $lis .= '<li><a href="'
            . html_entity_decode($items[$i]->link, ENT_COMPAT, 'UTF-8') . '"><b>'
            . html_entity_decode($items[$i]->title, ENT_COMPAT, 'UTF-8') . '</b></a><br />'
            . html_entity_decode($items[$i]->description, ENT_COMPAT, 'UTF-8')
        .'</li>';
    }
    
    return "<ul>$lis</ul>";
}
Edit : j'avais oublié de prendre en compte ton $nbr, c'est corrigé.
Modifié par marcv (19 Jun 2009 - 11:28)
Je ne peux que te remercier car je crois que seul, je n'y serais pas arrivé. (faute de connaissance et de tutoriel suffisament clair et complet)

De plus les expliclations son trés clair! Smiley smile Smiley biggrin Smiley ravi

On peut voir le résultat final ici par ex:
http://www.rumegiesmeteo.fr/commune/ERCHIN.php

Merci.
Modifié par flighty (20 Jun 2009 - 13:23)