为何在<p>标签中添加<br />无法换行反而显示代码?(Handlebars)
问题解决:Handlebars中HTML标签被直接显示而非解析
这是因为Handlebars默认会自动转义模板变量里的HTML内容(目的是防范XSS攻击),所以{{content}}里的<br />会被转成<br />,最终在页面上显示成文本而非换行标签。
有两种常用解决方式:
1. 使用三重花括号直接渲染未转义的HTML
把模板里的{{content}}改成三重花括号形式:
<p>{{{content}}}</p>
这样Handlebars就不会转义content里的HTML标签,<br />会被正常解析为换行。
注意:仅当你完全信任
content的来源(比如是后端自行生成的内容,而非用户输入)时使用此方法,否则可能引入XSS安全风险。
2. 用SafeString标记内容为安全
在传递content给模板前,用Handlebars的SafeString包装内容,明确告知Handlebars这段内容无需转义:
const Handlebars = require('handlebars'); // 原始带HTML标签的内容 const rawContent = "Hello <br /> World"; // 包装为安全字符串 const safeContent = new Handlebars.SafeString(rawContent); // 将safeContent传入模板上下文渲染 const template = Handlebars.compile('<p>{{content}}</p>'); const renderedHtml = template({ content: safeContent });
模板里依然使用{{content}}即可,因为内容已被标记为安全,Handlebars会直接渲染其中的HTML标签。
这种方式更灵活,适合需要精细控制哪些内容可解析为HTML的场景。
内容的提问来源于stack exchange,提问作者INA
相关产品推荐
相关产品推荐

