如何在Twig模板中显示包含HTML的字符串?

210

我该如何在Twig模板中显示包含HTML标签的字符串?

我的PHP变量包含了这段HTML和文本:

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

当我在我的twig模板中执行以下操作:

{{ word }}

我得到了这个:

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

我想要的是这个:

<b> a word </b>

这个是否可以轻松地获取?


我不会将此作为答案添加,但对于到达此问题的人来说,另一种方法是在Markdown中存储值,就像StackOverflow一样。然后,您可以创建一个带有自动转义的Twig过滤器,因为您可以信任HTML是安全的。不需要使用raw,并且您存储的值可供人类阅读! - rybo111
5个回答

453

1
当我执行替换时它无法正常工作。{{ word | replace( {(word_to_replace) : '<b>' ~ (word_to_replace) ~ '</b>' }) | raw }} 有什么想法吗? - Honesta
3
更新:我通过使用“set”将它添加到另一个变量中解决了这个问题,然后{{ word | raw }}可以正常工作。 - Honesta

88

您也可以使用以下方法:

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

只允许使用 <b> 标签。


7
如果您只想允许少量标签,我会建议选择这个版本。 - KalenGi
1
你如何允许多个标签? - Riki137

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

如果您希望允许多个标签


1

如果您不需要变量,可以在translations/messages.en.yaml中定义文本:
CiteExampleHtmlCode: "<b>我的静态文本</b>"

然后在twig中使用它:
templates/about/index.html.twig
… {{ 'CiteExampleHtmlCode' }}
或者如果您像我一样需要多语言支持:
… {{ 'CiteExampleHtmlCode' | trans }}

请参阅https://symfony.com/doc/current/translation.html以获取有关如何使用翻译的更多信息。


0

只有在使用 "render" 之前才对我起作用:

node--mycontenttype.html.twig:

{{ content.field_my_field|render|striptags }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接