Comment afficher une chaîne contenant du HTML dans un modèle de brindille?


164

Comment puis-je afficher une chaîne contenant des balises HTML dans un modèle Twig?

Ma variable PHP contient ce code HTML et texte:

$word = '<b> a word </b>';

Quand je fais cela dans mon modèle de brindille:

{{ word }}

J'ai compris:

&lt;b&gt; a word &lt;b&gt;

Je veux plutôt ceci:

<b> a word </b>

Est-il possible de l'obtenir facilement?


Je n'ajouterai pas cela comme réponse, mais une approche alternative pour les personnes qui atteignent cette question consiste à stocker les valeurs dans Markdown , comme le fait StackOverflow . Ensuite, vous pouvez créer un filtre Twig avec échappement automatique , car vous pouvez faire confiance au HTML pour être sûr. Pas rawbesoin, et vos valeurs stockées sont lisibles par l'homme!
rybo111

Réponses:



77

Vous pouvez aussi utiliser:

{{ word|striptags('<b>')|raw }}

de sorte que seule la <b>balise sera autorisée.


6
Je dirais que cette version est préférable si vous ne souhaitez autoriser que quelques balises.
KalenGi

3
Ce qui m'a fait trébucher, c'était de devoir mettre «brut» en dernier - je le mettrais en premier.
Ben Y

Comment autoriser plusieurs balises?
Riki137

32
{{ word|striptags('<b>,<a>,<pre>')|raw }}

si vous souhaitez autoriser plusieurs balises


0

si vous n'avez pas besoin de variable, vous pouvez définir du texte dans
Translations / messages.en.yaml :
CiteExampleHtmlCode: "<b> my static text </b>"

puis utilisez-le avec twig:
templates / about / index.html.twig
… {{ 'CiteExampleHtmlCode' }}
ou si vous avez besoin de multilangages comme moi:
… {{ 'CiteExampleHtmlCode' | trans }}

Jetons un coup d'œil à https://symfony.com/doc/current/translation.html pour plus d'informations sur l'utilisation des traductions.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.