这是我正在使用的代码:
<?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(">", ">", $content);
$content = str_replace("\"", """, $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提要页面,为什么会这样?
答案 0 :(得分:0)
问题是因为您没有正确地转义XML:
$content = str_replace("&", "&", $content);
$content = str_replace("<", "<", $content);
这两行实际上并没有做任何事情。您只是用相同的字符串替换字符串。对于替换字符串,您的意思是&
而不是&
和<
而不是<
吗?
更好的方法是使用CDATA标签,但这仍然无法正确转义所有字符。
更好的是 - 使用DOM类为您生成XML,而不是自己转义。
答案 1 :(得分:0)
你可以尝试我今天实施的这个解决方案RSS feed PHP/MySQL它应该是有用的