You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel Blade模板中处理渲染内容的iframe过滤问题

解决方案

首先明确:Blade 的 {!! !!} 语法本身不会自动移除任何 HTML 标签,你遇到的 iframe 被删除的问题,本质是项目中存在 HTML 内容净化逻辑(大概率是集成了 HTMLPurifier 这类安全过滤扩展),默认将 iframe 判定为不安全标签做了过滤处理。

方案1:调整 HTMLPurifier 配置(最推荐,兼顾安全和需求)

大部分 Laravel 项目会用 mews/purifier 扩展做 XSS 防护,你可以通过修改配置放行合法的 iframe:

  • 首先发布扩展的配置文件(如果之前没发布过):
php artisan vendor:publish --provider="Mews\Purifier\PurifierServiceProvider"
  • 打开生成的 config/purifier.php 文件,找到 HTML.Allowed 配置项,在允许的标签列表中新增 iframe 及你需要用到的属性:
'HTML.Allowed' => 'div,b,strong,i,em,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src],iframe[src|width|height|frameborder|allowfullscreen]',
  • 新增 iframe 域名白名单配置,避免恶意 iframe 带来的安全风险,在同配置文件中添加:
'URI.SafeIframeRegexp' => '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/|你需要放行的可信域名)%',

配置完成后直接用 {!! clean($post->content) !!} 或者 {!! Purifier::clean($post->content) !!} 输出内容即可。

方案2:自定义内容过滤逻辑

如果你的项目没有用第三方净化扩展,是自己写的标签过滤逻辑,只需要调整过滤规则,将 iframe 加入允许的标签白名单即可。
不推荐直接不加任何过滤输出原生 HTML 内容,会存在严重的 XSS 攻击风险。

方案3:临时用 strip_tags 快速放行(仅建议测试用)

如果只是临时测试,可以用 strip_tags 函数指定允许的标签,语法如下:

{!! strip_tags($post->content, '<p><div><img><iframe><a><ul><ol><li>') !!}

注意该方法不会过滤标签属性,安全性低,不要用于生产环境。

内容的提问来源于stack exchange,提问作者Fika Ridaul Maulayya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:12:03