Créer un flux RSS dynamique en évitant les problèmes d’encodage

Créer un flux XML avec PHP et MySQL (PhpMyAdmin)

Si vous avez besoin de créer un flux XML en PHP qui récupère des informations dans une base de données PhpMyAdmin, notre agence de referencement vous donne l’astuce !

Cette article traite aussi un sujet très emmerdant au niveau des fichiers XML : les problèmes de décodage des caractères spéciaux (é par exemple).

Sommaire pour créer un Flux RSS correctement

  1. Créer le fichier
  2. Récupérer les informations dans la base
  3. Régler les problèmes de décodage

Créer le fichier XML

Nous allons donc dans un premier temps, créer le fichier “rss.php” avec Notepad++ (sous Windows).

Afin que le fichier soit tout de même considéré comme un fichier XML, il faut ajouter des en-têtes PHP que voici :

[php]
<?php
header(« Content-type: text/xml »); // Fichier XML
echo ‘<’.’?xml version= »1.0? encoding= »ISO-8859-1??’.’>’; // Encodage ISO
include(‘sql/mysql-c.php’); // Connexion à la base de données
?>
[/php]

Récupérer les informations dans la base

Juste en dessous, il s’agit de débuter le fichier XML, avec les requêtes d’affichage

[php]
<rss version= »2.0?>
<channel>
<title>VOTRE SITE</title>
<link>http://www.votresite.com</link>
<description>Les dernières actualités VOTRE SITE</description>
<?php
$sql = « SELECT * FROM table »;
$req = mysql_query($sql) or die(‘Erreur SQL !’.$sql.’<br>’.mysql_error());
while($data = mysql_fetch_array($req)) {
$date = $data[1];
$titre = $data[2];
$contenu = $data[3];
$titre = html_entity_decode($titre);
$contenu = htmlentities($contenu, ENT_NOQUOTES, « UTF-8?);
$lg_max = 150;
if (strlen($contenu) > $lg_max)
{
$contenu = substr($contenu, 0, $lg_max);
$last_space = strrpos($contenu, » « );
$contenu = substr($contenu, 0, $last_space). »… »;
}
$url = ‘index.php?x=actualites-1&amp;i=’.$data[0];
?>
<item>
<title><?php echo $titre; ?></title>
<link>http://www.votresite.com/<?php echo $url; ?></link>
<guid isPermaLink= »true »>http://www.votresite.com/<?php echo $url; ?></guid>
<description><?php echo $contenu; ?></description>
<pubDate><?php echo $date; ?></pubDate>
</item>
<?php
}
?>
</channel>
</rss>
[/php]

Bon la partie récupération de données, ça vous le faîte bien sûr que vous le souhaitez et selon vos tables.

Régler les problèmes de décodage

Pour ce que tout le monde adore (le décodage) :

  • le format du fichier doit être encoder en ANSI
  • Le fichier XML : <?xml version=”1.0″ encoding=”ISO-8859-1″?>
  • il faut impérativement décoder le titre avec $titre = html_entity_decode($titre);
  • et décoder le contenu (description) avec  $contenu = htmlentities($contenu, ENT_NOQUOTES, “UTF-8”)
Share On Facebook
Share On Twitter
Share On Google Plus
Share On Linkedin
2 réponses
  1. révisions vacances
    révisions vacances says:

    Merci, ça fait plaisir de voir du code propre dans un article de blog, toutes les agences ne se donnent pas cette peine.

Les commentaires sont fermés.