这个php RSS提要有什么问题?

时间:2011-03-05 17:50:46

标签: php mysql xml rss

这是我正在使用的代码:

<?php
include "global.php";

$query = "SELECT * FROM posts WHERE `approved`='1' ORDER BY time DESC";
$res = mysql_query($query) or die(mysql_error());

$xml_output = "<?xml version=\"1.0\"?>\n";
$xml_output .= "<rss version=\"2.0\">\n\n";
$xml_output .= "<channel>\n\n";

while($row = mysql_fetch_assoc($res)){
    $id = $row['id'];
    $title = $row['title'];
    $content = ShortenText($row['content'], 500);

    $xml_output .= "\t<item>\n";
    $xml_output .= "\t\t<title>" . $title . "</title>\n";
        $content = str_replace("&", "&", $content);
        $content = str_replace("<", "<", $content);
        $content = str_replace(">", "&gt;", $content);
        $content = str_replace("\"", "&quot;", $content);
    $xml_output .= "\t\t<description>" . $content . "</description>\n";
    $xml_output .= "\t\t<link>" . "http://projectstratos.com/post.php?id=" . $row['id'] . "</link>\n";
    $xml_output .= "\t</item>\n";
}

$xml_output .= "</channel>\n\n"; 
$xml_output .= "</rss>";

echo $xml_output;
?>

它显示了一个空白的RSS提要页面,为什么会这样?

2 个答案:

答案 0 :(得分:0)

问题是因为您没有正确地转义XML:

$content = str_replace("&", "&", $content);
$content = str_replace("<", "<", $content);

这两行实际上并没有做任何事情。您只是用相同的字符串替换字符串。对于替换字符串,您的意思是&amp;而不是&&lt;而不是<吗?

更好的方法是使用CDATA标签,但这仍然无法正确转义所有字符。

更好的是 - 使用DOM类为您生成XML,而不是自己转义。

答案 1 :(得分:0)

你可以尝试我今天实施的这个解决方案RSS feed PHP/MySQL它应该是有用的