把手逃生字符串

时间:2014-05-14 13:47:23

标签: javascript ember.js handlebars.js

目前,我在手把中遇到了三重藏匿助手的问题。我有一个字符串来自一个我无法控制的服务,它正在返回转义的html,它已经在其中转义了html。下面澄清一个例子:

<p><span class=\"font-bold\">content content Support</span>, content content   content content content.</p>

很明显,当使用三重藏匿时,我会得到

<p>&lt;span class=\"font-bold\"&gt;content content Support&lt;/span&gt;, content content &nbsp; content content content.</p>

由于它是嵌套的,因此内部的跨度不会转义(如果有意义的话)。

我想知道我是否可以重载一个方法或某些东西来帮助我递归unescape。或者那里有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

尝试使用此帮助程序。它应该工作

Handlebars.registerHelper('html_decoder', function(text) {
  var str = unescape(text).replace(/&amp;/g, '&');

  var div = document.createElement('div');
  div.innerHTML = str;
  return div.firstChild.nodeValue; 
});

如果您使用Ember,可能就像这样

Ember.Handlebars.helper('html_decoder', function(text) {
  var str = unescape(text).replace(/&amp;/g, '&');

  var div = document.createElement('div');
  div.innerHTML = str;
  return div.firstChild.nodeValue; 
});

并像

一样使用它
{{html_decoder myString}}

答案 1 :(得分:2)

我知道问题是从2014年开始,Handlebars documentation现在提出这个简单的解决方案:

如果您不想转义某个值,请使用此{{{expression}}}之类的“triple-stash”。

如果你想要更多的控制注册一个帮助器,就像在同一文档中给出的例子中所解释的那样。