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

如何在Handlebars模板中正确展示Node.js后端存储的富文本数据?

嘿,这个问题我之前做项目时也碰到过!核心原因是 Handlebars 默认会自动转义 HTML 标签(为了防止XSS攻击),所以你从CKEditor存的带格式内容,读出来展示时就变成了<h1>转义后的&lt;h1&gt;这类字符。解决起来很简单,给你两种常用方案:


1. 直接用 Handlebars 原始输出语法

这是最快的解决方式:把模板里原本的{{yourCKEditorData}}改成{{{yourCKEditorData}}}——三个大括号就会告诉 Handlebars:「这个内容是可信的,别转义,直接渲染成HTML」。

比如你存的<h1>This is a title</h1> <p>This is a paragraph</p>,用三括号输出后,就会正常显示成标题和段落,而不是转义后的字符串。

2. 自定义「安全输出」Helper(适合批量场景)

如果你的项目里有很多地方需要渲染HTML内容,或者想更明确地标记哪些内容是「安全可渲染」的,可以在Node.js后端注册一个自定义Helper:

const handlebars = require('handlebars');

// 注册名为safe的Helper
handlebars.registerHelper('safe', function(content) {
  // 用SafeString包装内容,告诉Handlebars这是安全的HTML
  return new handlebars.SafeString(content);
});

之后在模板里就可以这样用:{{safe yourCKEditorData}},效果和三括号完全一致,但可读性更强,也方便统一管理这类场景。


⚠️ 重要安全提醒:
直接输出未过滤的HTML存在XSS风险!如果你的CKEditor允许普通用户输入内容,一定要在后端保存数据前用DOMPurify这类库过滤恶意代码,比如:

const DOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');

const window = new JSDOM('').window;
const purify = DOMPurify(window);

// 净化用户提交的CKEditor内容
const safeContent = purify.sanitize(userInputContent);
// 再把safeContent存入数据库

这样既能正常展示格式,又能避免恶意脚本注入的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:24:35