2010-11-11 6 views
0

J'essaie d'implémenter un flux RSS en utilisant PHP, pour autant que je puisse voir que cela devrait fonctionner, comme si vous visualisiez la source de la page, vous voyez le XML qui devrait être sorti dans le Flux RSS (http://www.mattlewis.org.uk/web/rss.php)Affichage de RSS avec la question PHP

Voici le code de la page:

header("Content-Type: application/xml; charset=ISO-8859-1"); 
    include 'includes/connection.php'; 
    print '<?xml version="1.0" encoding="UTF-8"?>'; 
    print '<?xml-stylesheet type="text/xsl" href="rssXSLT.xsl"?>'; 
    print '<rss version="2.0"> 

    <channel> 
    <title>FuseArt News</title> 
    <description>Welcome to our RSS news feed!</description>'; 

$query = "SELECT * FROM fuseArt_News"; 
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 

while ($row = mysql_fetch_array($result)) 
{ 
    $_xml .="<news_item>"; 
    $_xml .="<title>" . $row['Title'] . "</title>"; 
    $_xml .="<date>" . $row['Date'] . "</date>"; 
    $_xml .="<article>" . $row['Article'] . "</article>"; 
    $_xml .="</news_item>"; 

    print $_xml; 
} 

print '</channel> 
</rss>'; 

Quiconque a des idées pour lesquelles il ne peut pas être sortir?

Merci

+1

Qu'est-ce que le débogage de base vous dit? Y a-t-il des lignes dans le jeu de résultats? Est-ce que n'importe quoi produit? Le rapport d'erreurs est-il activé? –

+2

Vous spécifiez d'ailleurs deux jeux de caractères différents. Ce n'est probablement pas la raison de votre problème, mais vous voulez probablement faire à la fois UTF-8 –

Répondre

1

Vous avez les noms des éléments requis dans un document RSS erroné. Il devrait être <item> (il n'y a pas de <news_item>), <description> (pas <article>) et <pubDate> (pas <date>). Avec les dates, malheureusement, vous devez utiliser le format RFC822 de la vieille école ("Lun, 01 Jan 2000 00:00:00 GMT") plutôt que le format de style ISO-8601 que vous utilisez pour le moment.

En outre, vos jeux de caractères ne correspondent pas, et vous avez besoin d'appeler htmlspecialchars() (il est OK pour XML trop) sur chaque valeur de chaîne que vous injectez dans le XML (comme $row['Title']), sinon égarent < et & personnages complètement casser alimentation. Et si $news['Article'] est du texte brut plutôt que du balisage HTML, vous devrez l'ignorer à nouveau (double-htmlspecialchars(), une fois pour le texte vers HTML, une fois pour HTML vers HTML vers XML).

Quoi qu'il en soit, pourquoi tous les $_xml? PHP est un langage de modèle, vous pouvez aussi bien l'utiliser pour modéliser:

<?php 
    function h($s) { 
     echo htmlspecialchars($s, ENT_QUOTES, 'utf-8'); 
    } 
    function redoDateFormat($s) { 
     return gmstrftime('%a, %d %b %Y %H:%M:%S GMT', strtotime($s)); 
    } 

    // check charset is right... should it be ISO-8859-1 or UTF-8? 
    header('Content-Type: text/xml;charset=utf-8'); 
    $newses= mysql_query('SELECT * FROM fuseArt_News ORDER BY `Date` DESC'); 
?> 
<rss version="2.0"><channel> 
    <title>FuseArt News</title> 
    <description>Welcome to our RSS news feed!</description> 
    <?php while ($news= mysql_fetch_assoc($newses)) { ?> 
     <item> 
      <title><?php h($news['Title']); ?></title> 
      <pubDate><?php h(redoDateFormat($news['Date'])); ?></pubDate> 
      <description><?php h($news['Article']); ?></description> 
     </item> 
    <?php } ?> 
</channel></rss>   
+0

Cheers c'est génial – Matt

0

Comme Pekka a déclaré que vous voulez vous assurer que vos jeux de caractères sont les mêmes, je vous recommande d'utiliser UTF-8 sur les deux. Je ne vois pas pourquoi cela fonctionnera si les données de votre base de données sont correctes.

Une remarque est que vous devez vous assurer que vous mettez print $_xml; en dehors de la boucle while ou placez $_xml =""; au début de la boucle. Raison en est que le XMl continue à ajouter la boucle à chaque fois, puis vous imprimez l'ensemble du contenu encore et encore en faisant des doublons de vos données.

1

Votre document RSS2 est-il conforme? Je veux dire, ces balises que vous avez utilisées sont des balises RSS2 valides? Je vous suggère de passer à cette syntaxe plus commune: http://www.petefreitag.com/item/465.cfm

Faites-moi savoir si cela fonctionne. Ça a toujours marché pour moi.

+0

Merci, ouais changé les tags RSS et maintenant travailler – Matt