php - 如何在 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}}
如何以正确的格式显示消息?
解决方案
过滤器raw
应该这样做。正如@u_mulder 所建议的,如果它不起作用,也许可以尝试清除缓存。
{{ message.content | raw }}
但是,您永远不应该信任用户输入,因此striptags
建议清除任何意外标签。我认为在您的示例中,striptags
过滤器应该在raw
过滤器之后。在应用raw
变量之前应该转义,所以striptags
很可能不会剥离任何东西。
{{ message.content | raw | striptags('<img>') }}
如果raw
即使在清除缓存后仍无法正常工作,则可能您的变量已被转义两次。也许尝试转储它以查看它的确切内容。
编辑:
正如@ceejayoz 所指出的那样,它strip_tags
是不安全的,不应用作防止 XSS 的方法。因此,如果您“必须”使用raw
.
推荐阅读
- java - 反序列化期间出现 InvalidClassException 异常
- android - 键盘弹出时Android约束布局底部元素重叠
- javascript - Javascript 根据名称输入创建 slug,并将其显示在禁用的 slug 输入上
- nativescript - NativeScript Vue - 我将如何使用原生 iOS NSObject(如 SKStoreReviewController)进行添加?
- angular - Angular 应用程序使用 PKCE 登录到 cognito 然后调用我的 API
- javascript - 检查输入的值是否与数据库中其行中的另一个相关联
- sql-server - 为什么 OLE DB IRowset.GetNextRows 访问冲突
- ssh - 如果您已经拥有 .pub 文件,如何填充 known_hosts
- html - 哪个 Captcha 或相关易于安装在表单上?
- laravel-livewire - 在编辑任何输入时呈现数据表单列表?