首页 > 解决方案 > 如何在 TWIG 中显示变量

问题描述

我想创建一个聊天系统,并且想集成添加表情符号的可能性。<img>因此,我将消息内容和用户添加的每个表情符号保存在我的数据库中。问题是当我想显示表情符号图像时,它不会显示为图像,而是显示为文本。

例如,如果我有以下消息:

TestMessage

我在数据库中保存为

TestMessage<img alt="" class="emojioneemoji" src="https://cdn.jsdelivr.net/emojione/assets/3.1/png/32/1f601.png"><img alt="" class="emojioneemoji" src="https://cdn.jsdelivr.net/emojione/assets/3.1/png/32/1f601.png">

当我尝试在 TWIG 中显示消息时,我得到的结果与数据库中的相同,<img>不被视为标签。这就是我尝试显示消息的方式,但这些都不起作用:

{{ message.content}}

{{ message.content| raw}}

{{ message.content| striptags('<img>') | raw}}

如何以正确的格式显示消息?

标签: phphtmlsymfonytwig

解决方案


过滤器raw应该这样做。正如@u_mulder 所建议的,如果它不起作用,也许可以尝试清除缓存。

{{ message.content | raw }}

但是,您永远不应该信任用户输入,因此striptags建议清除任何意外标签。我认为在您的示例中,striptags过滤器应该在raw过滤器之后。在应用raw变量之前应该转义,所以striptags很可能不会剥离任何东西。

{{ message.content | raw | striptags('<img>') }}

如果raw即使在清除缓存后仍无法正常工作,则可能您的变量已被转义两次。也许尝试转储它以查看它的确切内容。

编辑:

正如@ceejayoz 所指出的那样,它strip_tags是不安全的,不应用作防止 XSS 的方法。因此,如果您“必须”使用raw.


推荐阅读