2012-05-18 16 views
19

Używam mechanizmu szablonowania Handlebars w aplikacji, którą buduję, aby renderować dane, które otrzymuję z serwera.Sposób dekodowania encji HTML za pomocą Handlebars

Wiem, że domyślnie wymyka się wartościom HTML i trzeba użyć potrójnych nawiasów {{{text}}}, aby można było renderować text: <p>Example</p> jako element HTML.

Problem polega na tym, co zrobić, jeśli dane, które otrzymuję, w tym znaczniki HTML, są już usunięte?

Tak więc, jeśli otrzymam dane, takie jak:

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

Jak wymusić kierownicę przełożyć go i uczynić go jako zwykłego HTML?

+2

Większość języków szablonów zakłada, że ​​dane są zakodowane dla docelowego wyjścia lub jest to zwykły tekst wymagający kodowania. Nie zawierają funkcji "dekoduj z arbitralnego kodowania". – Quentin

Odpowiedz

36

Najpierw należy go rozszyfrować, a następnie przekazać do kierownicy z potrójnymi wspornikami. Znam małą końcówkę dekodować podmioty html z 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 za użycie tego fajnego hacka do dekodowania bez potrzeby '.replace (/>/g, '>') .replace (/ & g, '&') .replace (/"/g, '"') .replace (/ '/ g,' ' ') .reklama (/ GodLesZ

+0

Dzięki, niezła sztuczka :) – Maverick

+0

Nie mam nic przeciwko głosowaniu dwa razy na tę odpowiedź, jeśli mogę. –

4

Kierownice zapewnia pomocników i napisać niestandardowy pomocnika jak następuje pod Hanlebars_helpers.js

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

i korzystać z tego pomocnika w swoim .handlebar plików lub .hbs pliki jak następuje

{{encodeMyString myHTMLData}} 

Bez pomocy Jquery można go używać dowolne gdzie wewnątrz kierownicy. Nawet ty możesz użyć helpera do przekazania samych danych, które zwrócą dane z dodanymi i dodanymi znacznikami.

Powiązane problemy