如何获取Jekyll中去除HTML标签的帖子渲染内容?
嘿,这个问题我之前折腾Jekyll静态博客的时候也碰到过!默认调用post.content拿到的确实是渲染好的完整HTML代码,要提取纯文本内容其实有几个实用的方案,看你需求来选:
1. 最快捷:用Jekyll内置的strip_html过滤器
这是最简单的方式,Jekyll自带了strip_html过滤器,直接就能把所有HTML标签去掉,只留下纯文本内容。用法很简单:
{{ post.content | strip_html }}
这个过滤器会直接剥离所有<>包裹的标签,连HTML注释也会一并去掉,输出就是干净的纯文本。如果只是需要基础的纯文本提取,这个完全够用。
2. 自定义过滤器(适合需要精细处理的场景)
如果你希望对纯文本做更多优化——比如去掉多余的空格、合并连续换行,或者处理一些特殊标签残留的内容,可以自己写一个Liquid过滤器。
在你的Jekyll项目根目录下创建_plugins文件夹(如果没有的话),然后新建一个text_processing.rb文件,写入以下代码:
module TextProcessingFilters def clean_plain_text(input) # 第一步:剥离所有HTML标签 stripped_text = input.gsub(/<[^>]+>/, '') # 第二步:把连续的空格、换行、制表符替换成单个空格 cleaned_text = stripped_text.gsub(/\s+/, ' ').strip # 可以在这里加更多自定义处理逻辑,比如去掉特殊字符之类的 cleaned_text end end Liquid::Template.register_filter(TextProcessingFilters)
然后在模板里就可以用这个自定义过滤器了:
{{ post.content | clean_plain_text }}
这种方式可以根据你的需求灵活调整处理逻辑,适合有特殊格式要求的场景。
3. 基于原始Markdown内容处理(可选)
如果你的帖子是用Markdown写的,也可以直接拿原始的Markdown内容转纯文本。Jekyll的文章对象有raw_content属性,它存储的是未渲染的原始Markdown代码。你可以先把它转成HTML,再剥离标签:
{{ post.raw_content | markdownify | strip_html }}
不过这个和直接用post.content | strip_html效果差不多,除非你需要在渲染前对Markdown做额外处理,否则没必要多这一步。
内容的提问来源于stack exchange,提问作者Benjamin Sommer
相关产品推荐
相关产品推荐

