2010-11-11 2 views
0

Я пытаюсь реализовать RSS-канал с помощью PHP, насколько я вижу, он должен работать, как будто вы просматриваете источник страницы, вы видите XML, который должен быть выведен в RSS подача (http://www.mattlewis.org.uk/web/rss.php)Отображение RSS с вопросом PHP

Вот код страницы:

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

Что такое базовая отладка, говорящая вам? Есть ли в результирующем наборе строки? Выходит что-нибудь вообще? Включено ли сообщение об ошибках? –

+2

Вы задаете два разных набора символов. Это, вероятно, не причина вашей проблемы, но вы, вероятно, хотите сделать и UTF-8 –

ответ

1

У вас неправильные имена необходимых элементов в документе RSS. Это должно быть <item> (нет <news_item>), <description> (не <article>) и <pubDate> (не <date>). К сожалению, с датами, к сожалению, вы должны использовать формат старой школы RFC822 («Mon, 01 января 2000 00:00:00 GMT»), а не формат ISO-8601, который вы используете в настоящий момент.

Кроме того, ваши кодировок не совпадают, и вам нужно вызвать htmlspecialchars() (это хорошо для XML тоже) над каждым значением строки вы впрыснуть в XML (как $row['Title']), в противном случае отклониться < и & символы будут полностью разговляйся корм. И если $news['Article'] - это простой текст, а не HTML-разметка, вам нужно будет снова скрыть HTML-код (double-htmlspecialchars(), один раз для текста в HTML, один раз для HTML-to-HTML-in-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

Cheers thats brilliant – Matt

0

Как Пекка заявил, вы хотите, чтобы убедиться, что ваши кодировок же, я рекомендую вам использовать UTF-8 на обоих. Я не понимаю, почему это не работает, если данные в вашей базе данных есть и правильные.

Одно из наблюдений заключается в том, что удостоверьтесь, что вы положили print $_xml; вне цикла while или поместили $_xml =""; в начале цикла. Причина в том, что XMl продолжает добавлять цикл каждый раз, а затем вы печатаете все содержимое снова и снова, делая дубликаты ваших данных.

1

Подходит ли ваш документ к RSS2? Я имею в виду, те теги, которые вы использовали, являются действительными тегами RSS2? Предлагаю вам перейти на этот более распространенный синтаксис: http://www.petefreitag.com/item/465.cfm

Сообщите мне, если он будет работать. Это всегда сработало для меня.

+0

Спасибо, да, изменили теги RSS и теперь работают – Matt

Смежные вопросы