Bonjour,
Voila je rencontre un petit problème avec mon code.
J'ai mis un utf8_unicode sur mon return $html et les accents (au niveau des titres fonctionnent) mais j'ai toujours un problème, ça affiche des parfois des "?" dans le texte
FeedParser.php
<?php
// on inclut la classe magpierss
require_once("magpierss/rss_fetch.inc");
// la fonction FeedParser() va extraire le contenu pour l'afficher
// elle prend en paramètre $url_feed, l'url du flux RSS et $nb_items_affiches, le nombre d'éléments (items) à afficher
function FeedParser($url_feed, $nb_items_affiches) {
// lecture du fichier distant (flux XML)
$rss = fetch_rss($url_feed);
// si le parcours du fichier se passe bien, on lit les élements (items)
if (is_array($rss->items)) {
// on ne garde que les $nb_items_affiches premiers éléments (items), nombre défini dans l'en-tête de la fonction
$items = array_slice($rss->items, 0, $nb_items_affiches);
// on peut récupérer les informations sur le site proposant le flux (optionnel)
//$site_titre = $rss->channel["title"]; // titre du site
//$site_lien = $rss->channel["link"]; // lien du site
//$site_description = $rss->channel["description"]; // description du site
// à présent on stocke les données dans $html, variable à afficher
// titre sous forme de lien
//$html .= "<a href=\"$site_lien\" title=\"$site_description\" target=\"_blank\">$site_titre</a><br />\n";
// on affiche la description du site proposant le flux
//$html .= "<span>$site_description</span><br clear=\"left\" target=\"_blank\"><br />\n"; // le clear="left" renvoie à la ligne même s'il y a une image
// on fait une boucle sur les informations : pour chaque item, récupérer $titre... et afficher
// foreach($items as $item) {
//
// // on mémorise les informations de chaque item dans des variables
// $titre = $item["title"];
// $lien = $item["link"];
// $description = $item["description"];
//
//
// // la date utilisée pour les flux RSS est au format timestamp, il faut donc formater la date
// // conversion au format jj/mm/aa. pour plus d'informations, vous conférer au tutorial sur les timestamp
// $date = date("d/m/y",strtotime($item["pubdate"]));
//
// // on affiche le titre de chaque item
// $html .= "<a href=\"".$lien."\" title=\"".$titre."\" target=\"_blank\">".$titre."</a><br>\n";
//
// // puis la date et la description
// $html .= "<span>$date - $description</span><br clear=\"left\"><br />\n";
// } // fin de la boucle
foreach($items as $item) {
// on mémorise les informations de chaque item dans des variables
$titre = $item["title"];
$lien = $item["link"];
$description = $item["description"];
//$image = $item["url"];
// la date utilisée pour les flux RSS est au format timestamp, il faut donc formater la date
// conversion au format jj/mm/aa. pour plus d'informations, vous conférer au tutorial sur les timestamp
$date = date("d/m/y",strtotime($item["pubdate"]));
// on affiche le titre de chaque item
$html.= "<a href=\"".$lien."\" title=\"".$titre."\" target=\"_blank\">".$titre."</a><br>";
// puis la date et la description
$html.= "<span>$date - $description</span><br clear=\"left\"><br />\n";
} // fin de la boucle
// on retourne la variable $html au programme (elle contient le code HTML pour l'affichage du flux)
return utf8_encode($html);
} // fin du traitement du fichier
} // fin de la fonction FeedParser()
?>
Cordialement, DayTech
Yop. Tu utilises quoi pour récupérer les données du rss???
Parce que j'ai utilisé curl et SimpleXML pour récupérer les données du rss, j'ai juste eu à mettre un htmlspecialchar
au titre et aucun problème d'encodage...
D'accord, j'essayerais demain car le site est hebergé sur un serveur web dans le magasin. Étant stagiaire, je n'ai pas accès au mdp donc pas de modification sur l'immédiat ^^
Bonne soirée, merci pour ta réponse, j'essayerais ! :p
Salut PhiSyX
J'ai bien mis le htmlspecialchars
que tu m'as dit de faire mais les "?" s'affichent encore et toujours...
Mon code PHP avec les modifications
<?php
// on inclut la classe magpierss
require_once("magpierss/rss_fetch.inc");
// la fonction FeedParser() va extraire le contenu pour l'afficher
// elle prend en paramètre $url_feed, l'url du flux RSS et $nb_items_affiches, le nombre d'éléments (items) à afficher
function FeedParser($url_feed, $nb_items_affiches) {
// lecture du fichier distant (flux XML)
$rss = fetch_rss($url_feed);
// si le parcours du fichier se passe bien, on lit les élements (items)
if (is_array($rss->items)) {
// on ne garde que les $nb_items_affiches premiers éléments (items), nombre défini dans l'en-tête de la fonction
$items = array_slice($rss->items, 0, $nb_items_affiches);
// on peut récupérer les informations sur le site proposant le flux (optionnel)
//$site_titre = $rss->channel["title"]; // titre du site
//$site_lien = $rss->channel["link"]; // lien du site
//$site_description = $rss->channel["description"]; // description du site
// à présent on stocke les données dans $html, variable à afficher
// titre sous forme de lien
//$html .= "<a href=\"$site_lien\" title=\"$site_description\" target=\"_blank\">$site_titre</a><br />\n";
// on affiche la description du site proposant le flux
//$html .= "<span>$site_description</span><br clear=\"left\" target=\"_blank\"><br />\n"; // le clear="left" renvoie à la ligne même s'il y a une image
// on fait une boucle sur les informations : pour chaque item, récupérer $titre... et afficher
// foreach($items as $item) {
//
// // on mémorise les informations de chaque item dans des variables
// $titre = $item["title"];
// $lien = $item["link"];
// $description = $item["description"];
//
//
// // la date utilisée pour les flux RSS est au format timestamp, il faut donc formater la date
// // conversion au format jj/mm/aa. pour plus d'informations, vous conférer au tutorial sur les timestamp
// $date = date("d/m/y",strtotime($item["pubdate"]));
//
// // on affiche le titre de chaque item
// $html .= "<a href=\"".$lien."\" title=\"".$titre."\" target=\"_blank\">".$titre."</a><br>\n";
//
// // puis la date et la description
// $html .= "<span>$date - $description</span><br clear=\"left\"><br />\n";
// } // fin de la boucle
foreach($items as $item) {
// on mémorise les informations de chaque item dans des variables
$titre = $item["title"];
$lien = $item["link"];
$description = $item["description"];
//$image = $item["url"];
// la date utilisée pour les flux RSS est au format timestamp, il faut donc formater la date
// conversion au format jj/mm/aa. pour plus d'informations, vous conférer au tutorial sur les timestamp
$date = date("d/m/y",strtotime($item["pubdate"]));
// on affiche le titre de chaque item
$html.= "<a href=\"".$lien."\" title=\"".$titre."\" target=\"_blank\">".$titre."</a><br>";
// puis la date et la description
htmlspecialchars($html.= "<span>$date - $description</span><br clear=\"left\"><br />\n");
} // fin de la boucle
// on retourne la variable $html au programme (elle contient le code HTML pour l'affichage du flux)
return utf8_encode($html);
} // fin du traitement du fichier
} // fin de la fonction FeedParser()
?>
De plus, j'aimerais savoir pourquoi il m'affiche une erreur :
Notice: Undefined variable: html in C:\xamp2\htdocs\feedparser.php on line 64
Merci pour votre aide. Cordialement, DayTech.
Yop... .
J'ai fait ça:
function fetch_rss($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'cURL PHP');
$results = curl_exec($ch);
curl_close($ch);
$xml = new SImpleXMLElement($results);
return $xml;
}
function FeedParser($url_feed, $nb_items_affiches)
{
$rss = fetch_rss($url_feed);
if (!$rss->channel->item) {
return false;
}
$html = null;
foreach ($rss->channel->item as $item) {
$titre = htmlspecialchars($item->title);
$lien = $item->link;
$description = $item->description;
$date = date("d/m/y", strtotime($item->pubDate));
$html .= "<a href=\"" . $lien . "\" title=\"" . $titre . "\" target=\"_blank\">" . $titre . "</a><br>";
$html .= "<span>$date - $description</span><br clear=\"left\"><br />\n";
}
return $html;
}
Mon code ne gère le cache (contrairement à la librairie que tu utilises "magpierss") il faudra le créer. ^^