Как отобразить строку, содержащую 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 }}

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


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 для получения дополнительной информации об использовании переводов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.