2015-04-25 36 views
6

Mam komentarz wywołanie ajax, który zwraca dane z wysłanego komentarza, mam również wbudowaną funkcjonalność @mention, po stronie serwera jest przetwarzanie @mentions i robi str_replace na wymienionych użytkowników, zastępując ich nazwy ze znacznikiem w odpowiedzi, npZatrzymaj nunjucks przed ucieczką HTML

{ 
    data: { 
     comment: "<a href=\"profile/derp\">Username</a> hey what's up" 
    } 
} 

jednak nie wydaje się znaleźć w dokumentacji, jak umożliwić nunjucks wydrukować to jako rzeczywisty HTML, ucieka go i wyświetla kod zamiast pozwolić jej być prawdziwym tagiem.

Czy ktoś wie, w jaki sposób mogę zezwolić na to, aby wydrukować go jako rzeczywistą etykietę?

Dzięki

Odpowiedz

22

Ok więc niemal natychmiast po tym, jak pisał ten Znalazłem odpowiedź! dla każdego, kto szuka tego po prostu; w szablonie, w którym drukujesz zmienną, dodaj bezpieczny filtr, który wyłączy automatyczne usuwanie.

{{ comment.content|safe }} 

Chociaż oznacza to, że jest podatny na wstrzyknięcie XSS, więc upewnij się, że dodajesz ochronę po stronie serwera.

+0

To wyrzuciło mnie, ponieważ kiedy początkowo zobaczyłem filtr, pomyślałem, że jest to * przeciwieństwo * - ten bezpieczny ucieknie od HTML. – Scribblemacher

+0

uratowałeś mnie :) – Ali

2

Można rozważyć przekazywanie danych meta komentarzem i pozwalając szablon tworzenia HTML:

<p><a href="{{ comment.user.url }}">{{ comment.user.name }}</a> {{ comment.text }}</p> 

a następnie przekazać dane meta tak:

comment: { 
    user: { url: "profile/derp", name: "Username" }, 
    text: "hey what's up" 
} 
+0

Dzięki za twoją sugestię, ale problem jest taki, że szablon nie zna wcześniej, jeśli pojawi się link, ponieważ ten link jest dodany tylko wtedy, gdy istnieją wzmianki, które mogą znajdować się w komentarzu na przykład. –

+0

@ AndréFigueira możesz dodać instrukcję warunkową. –

5

Można również uniknąć ucieczki globalnie: nunjucks.configure({autoescape:false});

+2

Chociaż prawie nigdy nie chcesz tego robić. – danneu