【发布时间】:2010-12-12 00:15:35
【问题描述】:
我有这个脚本来为 RSS 提要生成 XML 文件。在除 Chrome 之外的所有浏览器中都运行良好。 Chrome 只是将 XML 呈现为文本。可能与header("Content-Type: application/rss+xml; charset=ISO-8859-1"); 有关吗?
这是我正在使用的代码:
<?php
$linkUp = "http://localhost/sites/myBlog/";
header("Content-Type: application/rss+xml; charset=ISO-8859-1");
$rssfeed = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$rssfeed .= '<rss version="2.0">';
$rssfeed .= '<channel>';
$rssfeed .= '<title>Mytitle</title>';
$rssfeed .= '<link>' . $linkUp . '</link>';
$rssfeed .= '<description>Mydescription</description>';
$rssfeed .= '<language>en-us</language>';
$rssfeed .= '<copyright>© ' . strftime('%Y') . ' . " " . ' . $linkUp . '</copyright>';
$query = "SELECT * FROM rss";
$result = $db->query($query);
while($row = $db->fetch_array($result)) {
$rssfeed .= '<item>';
$rssfeed .= '<title>' . $row['rss_title'] . '</title>';
$rssfeed .= '<description>' . $row['rss_description'] . '</description>';
$rssfeed .= '<link>' . $row['rss_link'] . '</link>';
$rssfeed .= '<pubDate>' . date("D, d M Y H:i:s O", strtotime($date)) . '</pubDate>';
$rssfeed .= '</item>';
}
$rssfeed .= '</channel>';
$rssfeed .= '</rss>';
echo $rssfeed;
?>
【问题讨论】:
-
您应该在将数据连接到 XML 时对其进行转义,否则您可能会面临与 HTML 注入相同的风险。
htmlspecialchars适用于 XML 和 HTML。请注意<description>,如果您的描述是文本,则需要将其 HTML 转义 两次,否则将作为 HTML 处理。此外,您不应该在 XML 文件中使用像&copy;这样的实体引用,因为它们不是 HTML 中的预定义实体(除非您包含定义它们的 RSS DOCTYPE)。优先使用&#169;等字符引用或直接使用©ISO-8859-1 字节。 -
@bobince 感谢您的提示。很高兴知道。
-
根据经验,如果您正在生成 XML,则使用 XML 库,而不是模板。
标签: php xml rss google-chrome