You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll HTML闭合标签转义问题:构建出版物列表时如何避免标签被转义?

嘿,这个问题我之前折腾过好一阵!核心原因其实是你代码里用了HTML实体(</>)代替原生HTML标签,再叠加Jekyll的渲染机制,才导致闭合标签被双重转义。给你几个精准的解决方案:

1. 最关键:把HTML实体换成原生标签

你现在写的</li>这种写法本身就是文本形式的HTML实体,Jekyll会把它当成普通文本处理,最终输出时自然会转义成</li>。

直接把代码里所有的&lt;替换成<,&gt;替换成>,修正后的代码应该是这样的:

<div class="publications">
  {% assign sorted_pubs = site.publications | sort: "date" %}
  <ol>
    {% for pub in sorted_pubs %}
      <li>{% include pubformat.html %}</li>
    {% endfor %}
  </ol>
</div>

(顺便给代码加了换行,可读性更好,不影响渲染)

2. 把代码放到正确的模板文件里

如果是用_includes,一定要把这段代码存成**.html后缀**的文件(比如_includes/publication-list.html),不要用.md。因为.md文件会经过Markdown解析器处理,可能对HTML标签做额外转义。

之后在你的页面(比如index.html或者某个内容页)里用Liquid标签调用它:

{% include publication-list.html %}

3. 确认Markdown渲染器的设置(如果在.md页面里用)

如果你一定要在.md页面里直接写这段代码,需要确保Jekyll的Markdown渲染器允许内嵌HTML。打开_config.yml,检查或添加以下配置:

markdown: kramdown
kramdown:
  parse_block_html: true

parse_block_html选项会让kramdown(Jekyll默认渲染器)正确识别并渲染块级HTML标签,不会把它们当成普通文本转义。

4. 极端情况:用raw过滤器强制关闭转义

如果上面的方法都不行,大概率是pubformat.html里的内容被Liquid自动转义了。你可以在pubformat.html里输出内容时加上| raw过滤器,强制不转义:

{{ pub.title | raw }}
{{ pub.authors | raw }}

不过这种情况很少见,一般前面的步骤就能解决问题。


按这个流程走,应该就能解决标签被转义的问题了!

内容的提问来源于stack exchange,提问作者yohai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:08:13