RSS是一种基于XML的内容订阅格式,站点可以通过它向订阅用户推送最新的文章更新信息,其中摘要和完整内容是两个常用的内容输出维度,对应不同的XML标签定义。

RSS中摘要与内容相关的标签定义
在RSS 2.0规范中,并没有专门命名为<summary>的标准标签,行业里通常使用<description>标签来承载文章的摘要内容,而完整的内容一般会使用扩展命名空间下的<content:encoded>标签来实现。
description标签
<description>是RSS 2.0核心规范里的标准标签,每个<item>节点都可以包含这个标签,用来描述当前文章的核心信息。它的内容长度没有强制限制,但通常会放置简短的摘要内容,比如文章的前200字左右,或者核心观点概括。如果站点只提供摘要订阅,那么把完整内容放在<description>里也可以,但不符合同时提供两种版本的需求。
content:encoded标签
<content:encoded>属于RSS的扩展标签,来自http://purl.org/rss/1.0/modules/content/命名空间,专门用来存放文章的完整HTML内容,支持包含富文本格式、图片链接、代码块等复杂内容。要在RSS中使用这个标签,首先需要在RSS的根节点<rss>上声明对应的命名空间。
同时提供简短和完整文章版本的配置方法
要实现RSS同时输出摘要和完整内容,只需要在一个<item>节点中同时配置<description>和<content:encoded>两个标签即可,前者放简短摘要,后者放完整内容。
基础RSS结构示例
下面是一个完整的RSS源示例,同时包含摘要和完整内容:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>技术博客订阅源</title>
<link>https://ipipp.com/blog</link>
<description>分享编程与技术相关的原创内容</description>
<item>
<title>RSS的摘要与内容标签使用教程</title>
<link>https://ipipp.com/blog/rss-summary-content</link>
<pubDate>Mon, 01 Jan 2024 08:00:00 GMT</pubDate>
<!-- 这里是简短摘要 -->
<description>本文介绍RSS中摘要和内容标签的定义,以及如何同时提供短内容和完整文章的配置方法。</description>
<!-- 这里是完整内容 -->
<content:encoded>
<![CDATA[
<h2>RSS基础概念</h2>
<p>RSS是站点用来聚合内容的标准格式,用户可以通过RSS阅读器订阅多个站点的更新,无需逐个打开网站查看。</p>
<h2>标签配置细节</h2>
<p>配置时需要注意,content:encoded标签的内容如果包含HTML特殊字符,可以使用CDATA块包裹,避免XML解析错误。</p>
<p>摘要内容建议控制在200字以内,方便用户在RSS阅读器中快速浏览判断是否需要查看完整内容。</p>
]]>
</content:encoded>
</item>
</channel>
</rss>
配置注意事项
- 根节点的<rss>标签必须声明
xmlns:content命名空间,否则<content:encoded>标签无法被正确识别。 - <content:encoded>的内容如果包含XML特殊字符(如<、>、&),建议使用<![CDATA[ ]]>块包裹,避免XML解析出错。
- <description>标签的内容如果是纯文本可以直接写,如果包含HTML内容也需要做转义或者使用CDATA块。
- 不同的RSS阅读器对两个标签的支持程度略有差异,大部分主流阅读器都会优先展示<content:encoded>的完整内容,或者提供切换摘要和完整内容的选项。
常见问题解答
为什么我的content:encoded内容没有显示?
首先检查是否在<rss>根节点声明了正确的命名空间,其次检查内容是否格式正确,有没有未闭合的XML标签或者特殊字符没有处理。如果是本地测试,可以用XML校验工具检查RSS文件的结构是否正确。
可以用其他标签代替content:encoded吗?
部分站点会使用<xhtml:body>等扩展标签存放完整内容,但<content:encoded>是行业接受度最高的完整内容标签,兼容性最好,建议优先使用这个标签。
注意:如果RSS源需要兼容更多旧版阅读器,也可以在<description>中放完整内容,同时在<content:encoded>中放更长的内容或者额外补充信息,适配不同阅读器的解析逻辑。