Отображение RSS с вопросом PHP - PullRequest
0 голосов
/ 11 ноября 2010

Я пытаюсь реализовать RSS-канал, используя PHP, насколько я вижу, он должен работать, как будто вы просматриваете источник страницы, вы видите XML, который должен быть выведен в RSS-канал (http://www.mattlewis.org.uk/web/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>';

Кто-нибудь получил какие-либо идеи относительно того, почему он не может выводить?

Спасибо

Ответы [ 3 ]

1 голос
/ 11 ноября 2010

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

Дайте мне знать, если это работает.Это всегда работало для меня.

1 голос
/ 11 ноября 2010

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

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

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

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

...