如何正常展示CKEditor4格式化文本?Node.js+MySQL+EJS环境
解决EJS渲染CKEditor格式化HTML时的转义问题
这问题我之前帮不少开发者解决过,核心原因其实是EJS的默认输出行为在搞鬼!
1. 直接解决:替换EJS的输出标签
EJS里的<%= %>标签会自动对输出内容进行HTML转义,目的是防止XSS攻击,但这就导致CKEditor生成的HTML标签被转成了<p>这类实体字符,浏览器自然只会显示纯文本而非排版效果。
你只需要把:
<%=result.FormatedText%>
改成:
<%-result.FormatedText%>
<%- %>是EJS的不转义输出标签,它会直接把原始HTML内容输出给浏览器,这样CKEditor的格式化标签就能被正常解析渲染了。
2. 关键安全提醒:别忽略XSS风险
直接渲染未过滤的用户输入HTML是有XSS漏洞风险的——如果有人恶意输入包含脚本的内容,直接渲染会导致你的页面被注入恶意代码。所以一定要做HTML净化处理,这里推荐用DOMPurify库:
步骤1:安装依赖
npm install dompurify jsdom
步骤2:在Node.js中净化HTML
从数据库取回文本后,先通过DOMPurify过滤掉危险的脚本和标签,再传给EJS模板:
const createDOMPurify = require('dompurify'); const { JSDOM } = require('jsdom'); // 初始化DOMPurify const window = new JSDOM('').window; const DOMPurify = createDOMPurify(window); // 假设你从数据库拿到了result对象 const safeFormattedText = DOMPurify.sanitize(result.FormatedText); // 把净化后的内容传给模板 res.render('your-page', { formattedText: safeFormattedText });
步骤3:在EJS中输出净化后的内容
<%- formattedText %>
这样既保留了CKEditor的排版效果,又能有效防止XSS攻击,安全又实用。
内容的提问来源于stack exchange,提问作者Manohara
相关产品推荐
相关产品推荐

