J'ai hérité d'un lecteur RSS en PHP, que j'alimente avec un flux XML.
Le problème est que pour ajouter des éléments particuliers dans mon champs <description> (gras, breakers, liens etc.), je dois ajouter la mention <![CDATA[ mon texte ]]>, sans quoi mon flux est bien lu avec mon lecteur, mais pas par les lecteurs les plus communs (firefox, netvibes etc.).
Grâce au CDATA, mon flux est désormais bien interprété par les lecteurs communs, mais plus par le mien : la description ne s'affiche pas.
Y aurait-il une mention relative au CDATA à ajouter dans le PHP ?
Mon lecteur PHP :
PHP
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>title</title>
</head>
<body>
<p>Test lecteur flux XML avec CDATA</p>
<p>
<?php
# Configuration
$fichier_xml = "flux_cdata.xml";
$nombre_debut = 0;
$nombre_limite = 5;
$nb_jour_limite = 90;
$jourlimite = mktime(0, 0, 0, date("m") , (date("d")-$nb_jour_limite), date("Y"));
# Affichage du Flux
$raw = file_get_contents($fichier_xml);
if ($raw) {
if(eregi("<item>(.*)</item>",$raw,$rawitems)){
$items = explode("<item>", $rawitems[0]);
$nb = count($items);
$maximum = (($nb-1) < $nombre_limite) ? ($nb-1) : $nombre_limite;
for ($i=$nombre_debut;$i<$maximum;$i++) {
eregi("<title>(.*)</title>",$items[$i+1], $title);
eregi("<link>(.*)</link>",$items[$i+1], $link);
eregi("<description>(.*)</description>",$items[$i+1], $description);
eregi("<pubDate>(.*)</pubDate>",$items[$i+1], $pubDate);
eregi("<enclosure url=(.*)/>",$items[$i+1], $enclosure);
$date_timestamp = strtotime($pubDate[1]);
$date_02 = date('d m y',$date_timestamp);
$date_03 = date('d m y',$jourlimite);
if ($date_timestamp > $jourlimite) {
echo "<li>";
if ((strstr($link[1], 'http://www.le-rsi.fr')) and (strstr($link[1], '.php'))){
echo "<a href=\"".$link[1]."\"><span class=\"titreBlocTab\"><strong>".$title[1]."</strong></span></a>";
} else {
echo "<a href=\"".$link[1]."\" target=\"_blank\"><span class=\"titreBlocTab\"><strong>".$title[1]."</strong></span></a>";
}
if (strstr($enclosure[1], 'image/jpeg')) {
if (strstr($link[1], 'http://www.le-rsi.fr')) {
echo "<div class=\"illu_actu\"><a href=\"".$link[1]."\"><img src=".$enclosure[1]." width=\"74\" border=\"0\"></a></div>";
} else {
echo "<div class=\"illu_actu\"><a href=\"".$link[1]."\" target=\"_blank\"><img src=".$enclosure[1]." width=\"74\" border=\"0\"></a></div>";
}
} else {
/*RIEN*/
}
echo "<div class=\"txt_illu_actu\"><span class=\"texteBlocTab\">".$description[1]."<br /></span></div>";
echo "<div class=\"cleaner_actu\"></div>";
echo "</li>";
} else {
/*echo "<br /> RIEN" ;*/
}
}
}
}
?>
</p>
</body>
</html>
Mon flux XML :
PHP
<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
<channel>
<title>Actualités</title>
<description>Actualités du site</description>
<lastBuildDate>Mon, 30 June 2008 14:00:00 +0100</lastBuildDate>
<link>http://www.google.fr</link>
<item>
<title>title 1</title>
<link>http://www.google.fr</link>
<description> <![CDATA[ <strong> decription avec du CDATA. Br : <br>
a : <a href="http://en.wikipedia.org/wiki/CDATA" target="_blank">lien</a> </strong> ]]>
</description>
<category>Actualité</category>
<pubDate>Mon, 30 June 2008 14:00:00 +0100</pubDate>
<enclosure url="" alt="" title="" length="" type="" />
</item>
<item>
<title>title 2</title>
<link>http://www.google.fr</link>
<description>du texte iso sans cdata pour la description</description>
<category>Actualité</category>
<pubDate>Fri, 25 July 2008 17:00:00 +0100</pubDate>
<enclosure url="" alt="" title="" length="" type="" />
</item>
</channel>
</rss>
Le résultat se trouve ici. La description (non affichée) du 1er item contient du CDATA et la seconde n'en contient pas.
PS : je ne suis pas développeur et ne connais donc pas le PHP...
Merci d'avance !