我的Ember
应用内有一个对象,带有说明字段。此描述字段可能包含超链接,如此
My fancy text <a href='http://other.site.com' target='_blank'>My link</a> My fancy text continues...
但是,当我正常输出时,如{{ description }}
我的超链接显示为纯文本。为什么会发生这种情况?我该如何解决这个问题?
答案 0 :(得分:0)
默认情况下,Handlebars会在输出中转义任何HTML。对于标记中未转义的文本,请使用 triple-stashes :
{{{ description }}}
当有人控制属性时,有另一种选择: Handlebars.SafeString 。 SafeStrings被认为是安全的,也不会被转义。来自the documentation:
Handlebars.registerHelper('link', function(text, url) {
text = Handlebars.Utils.escapeExpression(text);
url = Handlebars.Utils.escapeExpression(url);
var result = '<a href="' + url + '">' + text + '</a>';
return new Handlebars.SafeString(result);
});
注意 - 请注意这一点。渲染来自用户输入的非转义文本存在安全问题;例如,攻击者可能会在描述中注入恶意脚本并劫持您的页面。