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?

Gildas Ross
la source
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:

368

Utilisez le mot-clé brut, http://twig.sensiolabs.org/doc/api.html#escaper-extension

{{ word | raw }}
Aurimas Ličkus
la source
1
Lors d'un remplacement, cela ne fonctionne pas pour moi. {{mot | replace ({(word_to_replace): '<b>' ~ (word_to_replace) ~ '</b>'}) | raw}} Une idée?
Honesta
2
MISE À JOUR: Je l'ai résolu en l'ajoutant à une autre variable en utilisant 'set', puis {{word | raw}} fonctionne très bien.
Honesta
77

Vous pouvez aussi utiliser:

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

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

Shimon S
la source
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

musicjerm
la source
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.

bcag2
la source