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

求助:Eleventy渲染FAQ页面时JSON中HTML内容转义问题解决

解决Eleventy中JSON里的HTML内容无法正常渲染的问题

你遇到的核心问题是Eleventy默认会自动转义模板输出的内容,导致JSON里的HTML实体(比如<)被原样显示,而非解析成对应的HTML标签。下面是几个可行的解决办法:

1. 使用Eleventy的safe过滤器

Eleventy提供了safe过滤器,用来标记内容是安全的,不需要转义。你只需要修改模板里输出answer的部分:

原来的代码:

<div class="details">
  {{ question.answer }}
</div>

修改为:

<div class="details">
  {{ question.answer | safe }}
</div>

这个过滤器会告诉Eleventy直接输出内容,不做HTML转义处理。

2. 修正JSON里的HTML内容格式

你的JSON里的answer部分用了HTML实体(&lt;、&gt;),这会导致即使加了safe过滤器,浏览器也会把它们当成文本显示。你需要把JSON里的实体替换成真实的HTML标签,同时确保JSON字符串的转义正确:

原来的JSON片段:

"answer": "&lt;ul&gt;\n&lt;li&gt;First, json needs newlines escaped to be newlines&lt;/li&gt;\\n&lt;li&gt;Eleventy seems to 'sanitize' the string&lt;/li&gt;\\n&lt;/ul&gt;"

修正后:

"answer": "<ul>\n<li>First, json needs newlines escaped to be newlines</li>\n<li>Eleventy seems to 'sanitize' the string</li>\n</ul>"

这样配合safe过滤器,HTML标签就能被正常渲染了。

3. 可选:用Markdown代替直接写HTML

如果觉得直接写HTML比较繁琐,你可以把answer写成Markdown格式,然后用Eleventy的markdown过滤器转换为HTML,再加上safe过滤器:

JSON里改成Markdown格式:

"answer": "- First, json needs newlines escaped to be newlines\n- Eleventy seems to 'sanitize' the string"

模板里修改为:

<div class="details">
  {{ question.answer | markdown | safe }}
</div>

这样既不用写繁琐的HTML标签,也能得到正常渲染的列表。

⚠️ 注意:使用safe过滤器时,要确保你信任JSON里的内容(比如是你自己维护的,不是用户输入的),避免XSS安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:52:58