Problème d'accent sur mon flux le dauphiné

Par DayTech, il y a 10 ans


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() ?>

Ce que j'obtiens

Cordialement, DayTech

4 réponses

PhiSyX, il y a 10 ans

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...

DayTech, il y a 10 ans

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

DayTech, il y a 10 ans

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.

PhiSyX, il y a 10 ans

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. ^^