Як відобразити рядок, що містить 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
Під час заміни це не працює для мене. {{слово | substitute ({(word_to_replace): '<b>' ~ (word_to_replace) ~ '</b>'}) | raw}} Будь-яка ідея?
Honesta

2
ОНОВЛЕННЯ: Я вирішив це, додавши його до іншої змінної за допомогою 'set', потім {{word | raw}} чудово працює.
Honesta

77

Ви також можете використовувати:

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

так що <b>буде дозволено лише тег.


6
Я б сказав, що ця версія є кращою, якщо ви хочете дозволити лише кілька тегів.
KalenGi

3
Що мене спонукало, потрібно було поставити "сирого" останнім - я би поставив його першим.
Ben Y

Як дозволити кілька тегів?
Riki137

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

якщо ви хочете дозволити кілька тегів


0

якщо вам не потрібна змінна, ви можете визначити текст у
перекладах / 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 для отримання додаткової інформації про використання перекладів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.