Hugo模板中的CDATA
经 liuf 提醒,我之前做的 Atom feed 没有输出全文,检查了一下发现自己写的 Atom 模板有点问题。
参考了一下之前 Movable Type 输出的 Atom feed,发现它的 content
会套一层 <![CDATA[ ... ]]>
,大致浏览了一下 RFC 4287,
似乎这么做的理由是 RFC 4287 4.1.3.3 中关于 HTML 编码的要求,套一层 CDATA 比较省事。
于是接下来的问题是如何让 Hugo 输出文字的 <![CDATA[
这样的文字而不是把其中的 <
转换成 <
。此处可以使用 safeHTML
来把这些文字标记为原样输出,具体到输出 Atom feed 的 <content>
元素,可以用下面的写法:
<content type="html" xml:base="{{ "/" | absLangURL }}">{{ "<![CDATA[" | safeHTML }}{{ .Content }}{{ "]]>" | safeHTML }}</content>
修改模板后,检查并确认生成的 XML 依然是 well-formed 即可。