使用把手解释html字符串但转义脚本标记

时间:2014-01-31 00:14:45

标签: mustache handlebars.js

我为我的页面引入了一串html,除了脚本标签之外,我认为它是html安全的。我知道三重括号会逃避html,省略任何脚本标签的步骤是什么?

示例

var foo = "<h1>Foo</h1><script>some script that might possibly be in here</script><p>bar</p>

然后在我的.hbs中:

{{{foo}}}

我想看到h1和段落但是遗漏了脚本。

提前致谢。

1 个答案:

答案 0 :(得分:6)

您有几个选择:

  1. 删除脚本标记,然后将其作为上下文传递到Handlebars模板中。

  2. 创建一个Handlebars帮助器来代替三重花括号表达式。这样的事情:

  3.    
        Handlebars.registerHelper('strip-scripts', function(context) {
          var html = context;
          // context variable is the HTML you will pass into the helper
          // Strip the script tags from the html, and return it as a Handlebars.SafeString
          return new Handlebars.SafeString(html);
        });
    

    然后在您的模板中使用它:

        {{strip-scripts foo}}
    

    使用帮助程序时不需要使用三重花括号,因为助手已经返回一个SafeString。

    帮助程序可能比第一个选项更有用,因为您可以在整个模板中重复使用它。

    查看此StackOverflow问题,获取有关如何安全地删除脚本标记的帮助:Removing all script tags from html with JS Regular Expression

    如果您使用Node.js在服务器端执行此操作,则可以使用Cheerio而不是jQuery。