Вы неправильно указали имена необходимых элементов в документе 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>