delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

14 Feb 2021

Hugo模板中的CDATA

liuf 提醒,我之前做的 Atom feed 没有输出全文,检查了一下发现自己写的 Atom 模板有点问题。

参考了一下之前 Movable Type 输出的 Atom feed,发现它的 content 会套一层 <![CDATA[ ... ]]>,大致浏览了一下 RFC 4287, 似乎这么做的理由是 RFC 4287 4.1.3.3 中关于 HTML 编码的要求,套一层 CDATA 比较省事。

于是接下来的问题是如何让 Hugo 输出文字的 <![CDATA[ 这样的文字而不是把其中的 < 转换成 &lt;。此处可以使用 safeHTML 来把这些文字标记为原样输出,具体到输出 Atom feed 的 <content> 元素,可以用下面的写法:

<content type="html" xml:base="{{ "/" | absLangURL }}">{{ "<![CDATA[" | safeHTML }}{{ .Content }}{{ "]]>" | safeHTML }}</content>

修改模板后,检查并确认生成的 XML 依然是 well-formed 即可。