MongoDB存储含锚标签文章,EJS模板锚标签显示为纯文本的解决方法
解决EJS渲染HTML标签被转义的问题
- 替换EJS渲染语法:直接把原来的
<%= article.content %>改成<%- article.content %>。<%= %>会自动转义HTML内容,而<%- %>会输出未转义的原始HTML,这样存储的<a>锚标签就能正常解析成可点击的链接。 - 防范安全风险:如果文章内容来自用户输入,直接渲染未转义的HTML可能引发XSS攻击。可以用HTML过滤库对内容做预处理,只保留安全的标签和属性,再传入模板渲染。示例代码如下:
const sanitizeHtml = require('sanitize-html'); // 从数据库读取原始内容 const rawContent = article.content; // 只允许<a>标签及href属性 const safeContent = sanitizeHtml(rawContent, { allowedTags: ['a'], allowedAttributes: { 'a': ['href'] } }); // 将处理后的安全内容传给EJS模板 res.render('article', { content: safeContent }); - 确认存储格式:确保MongoDB中存储的是原始HTML字符串,不要存成转义后的
<a href...>格式,否则即使换用<%- %>也无法正常解析。
内容的提问来源于stack exchange,提问作者andrePaiva
相关产品推荐
相关产品推荐

