Как отобразить строку, содержащую HTML в шаблоне ветки?

164

Как я могу отобразить строку, содержащую теги HTML в шаблоне ветки?

Моя переменная PHP содержит этот HTML и текст:

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

Когда я делаю это в моем шаблоне ветки:

{{ word }}

Я получаю это:

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

Я хочу это вместо этого:

<b> a word </b>

Возможно ли получить это легко?

Гилдас Росс
источник
Я не буду добавлять это в качестве ответа, но альтернативный подход для людей, решающих этот вопрос, заключается в сохранении значений в Markdown , как это делает StackOverflow . Тогда вы могли бы создать фильтр Twig с автоматическим экранированием , поскольку вы можете доверять HTML как безопасному. Нет rawнеобходимости, и ваши сохраненные значения понятны человеку!
rybo111

Ответы:

368

Используйте необработанное ключевое слово, http://twig.sensiolabs.org/doc/api.html#escaper-extension

{{ word | raw }}
Ауримас Личкус
источник
1
При замене это не работает для меня. {{слово | replace ({(word_to_replace): '<b>' ~ (word_to_replace) ~ '</ b>'}) | raw}} Есть идеи?
Хонеста
2
ОБНОВЛЕНИЕ: я решил это, добавив его в другую переменную, используя 'set', затем {{word | raw}} работает отлично.
Honesta
77

Вы также можете использовать:

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

так что <b>будет разрешен только тег.

Шимон С
источник
6
Я бы сказал, что эта версия предпочтительнее, если вы хотите разрешить только несколько тегов.
KalenGi
3
Меня сбило с толку то, что мне нужно было поставить «сырой» последним - я бы поставил первым.
Бен И
Как вы разрешаете несколько тегов?
Riki137
32
{{ word|striptags('<b>,<a>,<pre>')|raw }}

если вы хотите разрешить несколько тегов

musicjerm
источник
0

если вам не нужна переменная, вы можете определить текст в
translations / messages.en.yaml :
CiteExampleHtmlCode: "<b> my static text </b>"

затем используйте его с twig:
templates / about / index.html.twig
… {{ 'CiteExampleHtmlCode' }}
или, если вам нужны мультиязыки, такие как я:
… {{ 'CiteExampleHtmlCode' | trans }}

Давайте взглянем на https://symfony.com/doc/current/translation.html для получения дополнительной информации об использовании переводов.

bcag2
источник