Google Chrome 将 XML 呈现为 RSS 提要的文本

Posted

技术标签:

【中文标题】Google Chrome 将 XML 呈现为 RSS 提要的文本【英文标题】:Google Chrome rendering XML as text for RSS feed 【发布时间】: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 库,而不是模板。 【参考方案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");

【讨论】:

不走运..仍然呈现为文本。 相信你会在这里找到答案:sites.google.com/a/chromium.org/dev/user-experience/… 这仅在您的字符编码为 ISO-8859-1 时才有效;如果你用记事本或其他东西编码,它可能是 ASCII 或 UTF-8

以上是关于Google Chrome 将 XML 呈现为 RSS 提要的文本的主要内容,如果未能解决你的问题,请参考以下文章

Google webfonts 在 Windows 上的 Chrome 中呈现断断续续

像素的一生

每日安全资讯Google Chrome和Mozilla Firefox将支持全新无密码登录规范

Google Webapps:HTML 表格在移动设备上颠倒呈现

flex FileReference 保存功能触发取消事件与 google-chrome 版本 47.0.2526.106 m 上的 xml 文件

js读取xml文件-适用于firefox、chrome