node.js和Handlebars:编译的HTML被转义

Enr*_*ent 11 template-engine node.js html-escape-characters handlebars.js

我在节点应用程序中使用把手,我遇到了麻烦.

这是模板 index.html

{{CONTENT}}
Run Code Online (Sandbox Code Playgroud)

这是代码

var fs = require("fs");
var handlebars = require("handlebars");

var data = {
    CONTENT: "<b>Hello world!</b>"
};

var templateFile = fs.readFileSync('./index.html', 'utf8');
var template = handlebars.compile( templateFile );
var html = template(data);
Run Code Online (Sandbox Code Playgroud)

问题是标签<B>被转义为&lt;B&gt;

我怎么能避免这个?

Poe*_*rin 37

来自handlebarsjs.com:

Handlebars HTML-escapes {{expression}}返回的值.如果您不希望Handlebars转义值,请使用"triple-stash".

<div class="entry">
  <h1>{{title}}</h1>
  <div class="body">
    {{{body}}}
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

有了这个背景:

{
  title: "All about <p> Tags",
  body: "<p>This is a post about &lt;p&gt; tags</p>"
}
Run Code Online (Sandbox Code Playgroud)

结果是:

<div class="entry">
  <h1>All About &lt;p&gt; Tags</h1>
  <div class="body">
    <p>This is a post about &lt;p&gt; tags</p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

但是从我的观点来看,它可能会使模板分离的目的与你的js文件相悖.

如果使用预编译,则使用no​​Escape选项:

handlebars.precompile(content, {noEscape: true})
Run Code Online (Sandbox Code Playgroud)


rob*_*lep 24

你想在模板中使用'triple stash':

{{{CONTENT}}}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答” :) (2认同)