【问题标题】:Google Chrome rendering XML as text for RSS feedGoogle Chrome 将 XML 呈现为 RSS 提要的文本
【发布时间】: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>&copy; ' . 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。请注意&lt;description&gt;,如果您的描述是文本,则需要将其 HTML 转义 两次,否则将作为 HTML 处理。此外,您不应该在 XML 文件中使用像 &amp;copy; 这样的实体引用,因为它们不是 HTML 中的预定义实体(除非您包含定义它们的 RSS DOCTYPE)。优先使用&amp;#169; 等字符引用或直接使用© ISO-8859-1 字节。
  • @bobince 感谢您的提示。很高兴知道。
  • 根据经验,如果您正在生成 XML,则使用 XML 库,而不是模板。

标签: php xml rss google-chrome


【解决方案1】:

我遇到了同样的问题,我使用了“application/xml”,它马上就解决了。 Chrome 不喜欢“application/rss+xml”。

【讨论】:

  • 没有修复,但看起来更整洁。
【解决方案2】:

简答:添加“view-source:{feedurl}”

请注意,当 url 以 .xml 结尾并被 chrome 识别为提要时,Chrome 会烦人地打开“保存文件”对话框。但许多提要 URL 不以扩展名(即 .xml)结尾,例如:

http://feeds.feedburner.com/ScottHanselman

在根目录下,该 url 仍然是常规的 xml 提要,但对于我们只想查看真实 xml 的编码人员来说,Chrome 和其他在这种情况下会向您展示提要的人类可读显示(非常烦人!) .

因此,上述两个问题的答案都包含在 Arne Roomann-Kurrik 的上述评论中。他应该把它作为答案,因为它有效!

查看来源:http://feeds.feedburner.com/ScottHanselman 你甚至不需要“http://”。

【讨论】:

    【解决方案3】:

    这是尚未修复的 chrome 中的 known bug,chrome 不会显示任何格式的 xml rss 提要。

    更新:Chrome 现在有一个RSS subscription / reader extension

    【讨论】:

    • @Wedge - 感谢您提供信息。
    • 不敢相信这个问题已经存在一年多了。
    • 尝试在 Chrome 中您的 RSS 提要的“http://...” URL 前添加“view-source:” - 至少您会看到一些 xml 标签的语法着色
    • 你在 2009 年发布了这个,现在是 2015 年,因为这种行为才来到这里。我认为他们没有计划解决这个问题,因为它是“旧”技术。很奇怪。
    【解决方案4】:

    试试 chrome 扩展“XML 树”

    【讨论】:

      【解决方案5】:

      归根结底,“大多数”用户并未使用 RSS 支持,因此他们目前仅将其作为扩展来实现。该扩展程序可在此处获得: RSS SubscriptionExtension

      在该错误的结束评论中对此进行了详细讨论 - 您可以在此处阅读开发人员说明: Comment 149

      【讨论】:

        【解决方案6】:

        尝试将标题更改为text/xml,看看是否有帮助:

        header("Content-Type: text/xml; charset=ISO-8859-1");
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-16
        • 2021-06-23
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        相关资源
        最近更新 更多