2010-11-11 59 views
0

我試圖用PHP實現一個RSS提要,據我所見,它應該可以工作,就好像你查看頁面源代碼一樣,你可以看到應該輸出到RSS源(http://www.mattlewis.org.uk/web/rss.php)用PHP顯示RSS問題

下面是頁面代碼:

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>'; 

任何人有任何想法,爲什麼它可能不是輸出?

感謝

+1

什麼是基本調試告訴你?結果集中是否有行?有什麼輸出嗎?錯誤報告是否打開? – 2010-11-11 12:06:31

+2

您正在指定兩個不同的字符集。這可能不是你的問題的原因,但你可能想要使UTF-8 – 2010-11-11 12:07:07

回答

1

你已經得到了RSS文檔中所需元素的名稱錯誤。它應該是<item>(沒有<news_item>),<description>(不是<article>)和<pubDate>(不是<date>)。不幸的是,不幸的是,您必須使用舊式的RFC822家族格式(「Mon,01 Jan 01 00:00:00 GMT」),而不是您目前使用的ISO-8601格式格式。

而且,你的字符集不匹配,你需要調用htmlspecialchars()(這對XML也可以)在你注入到XML(如$row['Title'])每個字符串值,否則流浪<&人物將徹底打破你的飼料。如果$news['Article']是純文本而不是HTML標記,則需要HTML轉義它再次(雙-htmlspecialchars(),一次用於文本到HTML,一次用於HTML到XML-XML)。

無論如何,爲什麼所有的$_xml? PHP是一種模板語言,您不妨將它用於模板化:

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

乾杯這就是輝煌 – Matt 2010-11-11 12:48:57

0

如佩卡曾表示要確保你的字符集是一樣的,我會建議更換你都使用UTF-8。我不明白爲什麼這將無法正常工作提供數據庫中的數據。

一個觀察結果是,Id確保您將print $_xml;置於while循環的外部,或將$_xml ="";置於循環的開始處。原因在於XMl每次都會不斷添加循環,然後一遍又一遍地打印整個內容,使數據重複。

1

是您的文件與RSS2兼容? 我的意思是,你使用的那些標籤是有效的RSS2標籤? 我建議你切換到這個更常見的語法:http://www.petefreitag.com/item/465.cfm

讓我知道它是否工作。它一直爲我工作。

+0

謝謝,是改變了RSS標籤,現在正在工作 – Matt 2010-11-11 12:49:20