handlerbars {{ 和 {{{ 的区别是什么

在 Handlebars 模板引擎中,{{{{{ 的主要区别在于 HTML 转义处理。

{{expression}}

  • HTML 转义:使用双花括号 {{}} 包裹的表达式会自动进行 HTML 转义。这意味着如果表达式的值包含 HTML 特殊字符(如 <, >, & 等),这些字符会被转义成对应的 HTML 实体。例如,& 会被转义为 &amp;< 会被转义为 &lt;,以防止 XSS(跨站脚本)攻击[1][3][5]。

{{{expression}}}

  • 不进行 HTML 转义:使用三花括号 {{{}}} 包裹的表达式不会进行 HTML 转义。这样可以直接输出包含 HTML 标签的内容。例如,如果表达式的值是 <p>Hello</p>,它会被直接渲染成 HTML 标签,而不会被转义[2][3][5]。

示例

假设有如下模板和数据:

<div class="entry">
  <h1>{{title}}</h1>
  <div class="body">{{body}}</div>
  <div class="raw-body">{{{body}}}</div>
</div>

数据:

{
  "title": "My Post",
  "body": "<p>This is a paragraph.</p>"
}

渲染结果如下:

<div class="entry">
  <h1>My Post</h1>
  <div class="body">&lt;p&gt;This is a paragraph.&lt;/p&gt;</div>
  <div class="raw-body"><p>This is a paragraph.</p></div>
</div>

在这个例子中,{{body}} 会将 <p>This is a paragraph.</p> 转义为 &lt;p&gt;This is a paragraph.&lt;/p&gt;,而 {{{body}}} 则直接输出原始的 HTML 内容。

总结

  • 使用 {{}} 可以确保输出内容是安全的,防止 XSS 攻击。
  • 使用 {{{}}} 可以直接输出 HTML 内容,但需要确保输入内容是可信的,以避免安全风险。

参考文献:

  • [1] https://blog.csdn.net/zshake/article/details/82145988
  • [2] https://handlebarsjs.com/zh/guide/expressions.html
  • [3] https://blog.csdn.net/y40152671/article/details/119737575
  • [5] https://keenwon.com/992/

Citations:
[1] https://blog.csdn.net/zshake/article/details/82145988
[2] https://handlebarsjs.com/zh/guide/expressions.html
[3] https://blog.csdn.net/y40152671/article/details/119737575
[4] https://www.kancloud.cn/z591102/interview/945440
[5] https://keenwon.com/992/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值