把手助手 - 返回HTML而不是文本

Adr*_*ian 19 javascript helpers handlebars.js

我为我的模板写了一个简单的帮手.这是代码:

Handlebars.registerHelper('splitQuote', function (string) {
    if (string.indexOf('|') !== -1) {
        return string.replace('|', '<span>') + '</span>';
    }
    return string;
});
Run Code Online (Sandbox Code Playgroud)

所以我传递一个字符串,然后用"|"分割字符串 字符.我还想把第二部分放入span标签.

问题是,返回的结果是纯文本,所以我得到了像文本而不是HTML的span标签.

有谁知道捕获的是什么?

TNX

meg*_*wac 34

如果你想让Handlebars逃脱它,你必须在你的助手中将字符串标记为html.使用Handlebars.safeString要做到这一点.以下内容应符合您的需求

Handlebars.registerHelper('splitQuote', function(string) {
    if (string.indexOf('|') !== -1) {
        return new Handlebars.SafeString(string.replace('|', '<span>') + '</span>');
    }
    return string;
});
Run Code Online (Sandbox Code Playgroud)

正如评论中所提到的,Handlebars.Utils.escapeExpression(string)在进行自定义格式化之前,您应该使用对字符串进行编码来转义传递的字符串.我建议像这样写:

Handlebars.registerHelper('splitQuote', function(string) {
    string = Handlebars.Utils.escapeExpression(string);
    if (string.indexOf('|') !== -1) {
        string = string.replace('|', '<span>') + '</span>';
    }
    return new Handlebars.SafeString(string); // mark as already escaped
});
Run Code Online (Sandbox Code Playgroud)

  • 如果你要使用SafeString,你应该在添加`<span>之前手动HTML编码`string`. (2认同)

Men*_*des 27

你不需要使用SafeString.相反,使用车把的"三重胡须":

Handlebars网站,HTML Escaping部分:

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

因此,html中的简单三重引号将避免转义:

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

  • 这应该是接受的答案/首选方式 (4认同)