我对Ember很新,但是我在v1.12并且遇到了以下问题。
我关注的范例是:
Ember.Handlebars.Utils.escapeExpression(value);
来转义输入文本Ember.Handlebars.SafeString(value);
然而,1。似乎逃避了撇号。这意味着我传递给它的任何句子都会被转义。我怎样才能避免这种情况,同时确保我没有引入潜在的漏洞?
编辑:示例代码
export default Ember.Handlebars.makeBoundHelper(function(value){
// Make sure we're safe kids.
value = Ember.Handlebars.Utils.escapeExpression(value);
value = addUrls(value);
return new Ember.Handlebars.SafeString(value);
});
其中addUrls
是一个使用RegEx查找和替换主题标签或用户名的函数。例如,如果给它#emberjs foo
,它将返回<a href="blah">#emberjs</a> foo
。
上述辅助函数的结果将显示在Ember(HTMLBars)模板中。
答案 0 :(得分:0)
escapeExpression
用于将字符串转换为表示形式,当插入DOM时,由浏览器转换的转义序列将生成原始字符串。所以
"1 < 2"
转换为
"1 < 2"
插入DOM时的显示为
1 < 2
如果将"1 < 2"
直接插入到DOM中(例如使用innerHTML
),则会导致相当多的麻烦,因为浏览器会将<
解释为标记的开头
所以escapeExpression
转换&符号,小于符号,大于符号,单引号,直双引号和反引号。引号的转换对于文本节点不是必需的,但可以用于属性值,因为它们可以用单引号或双引号括起来,同时也包含这样的引号。
以下是使用的列表:
var escape = {
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'",
"`": "`"
};
我不明白为什么逃避引号会导致你出现问题。假设您正在执行escapeExpression
,因为您希望在使用普通双存储<
输出到模板时正确显示{{}}
等字符。引号也同样适用。它们可能会被转义,但是当显示字符串时,它应该显示正常。
也许您可以提供有关输入和所需输出的更多信息,以及您如何&#34;打印&#34;当你不想要时,字符串和你在什么情况下看到逃脱的引号。