2012-05-18 56 views
19

我使用的把手上我建设呈现我从服务器获取数据的应用程序模板引擎进行解码。如何HTML实体把手

我知道它默认情况下会转义HTML值,并且您必须使用三个方括号{{{text}}}才能将text: <p>Example</p>呈现为HTML元素。

问题是,如果我收到的数据(包括HTML标签)已经转义,我该怎么办?

所以,如果我收到这样的数据:

text: &lt;p&gt;Example&lt;/p&gt; 

如何强制车把翻译它并使其正常HTML?

+2

大多数模板语言假定数据为目标输出任一编码或为需要编码纯文本。他们没有提供“解码来自任意编码”的功能。 – Quentin

回答

36

你必须先解码它,然后将它传递给带有三个方括号的句柄。我知道一个小技巧为HTML实体使用jQuery解码:

// encoded is "&lt;p&gt;Example&lt;/p&gt" in your example 
var decoded = $('<textarea />').html(encoded).val(); 
// decoded should now return <p>Example</p> 
+2

+1使用这个很好的黑客解码而不需要'.replace(/>/g,'>').replace(/&/ g,'&').replace(/“/ g,'"' ).replace(/ '/克,' ' ').replace(/ GodLesZ

+0

谢谢,好的技巧:) – Maverick

+0

我,如果我可以不介意为这个答案投票两次。 –

4

把手提供助手和下像如下编写自定义的助手Hanlebars_helpers.js

Handlebars.registerHelper('encodeMyString',function(inputData){ 
    return new Handlebars.SafeString(inputData); 
}); 

,并在您.handlebar文件中使用这个帮手或.hbs文件如下

{{encodeMyString myHTMLData}} 

没有的jQuery帮助,您可以使用它的任何你的车把里面。 即使您可以使用助手来单独传递数据,并且会使用预先标记和附加标记返回数据。