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>© ' . 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 库,而不是模板。
【参考方案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 文件