
Laravel 默认会对 Blade 中 {{ }} 输出的内容进行 HTML 转义,导致 标签被当作纯文本显示;需改用 {!! !!} 语法取消转义,并注意 XSS 风险防范。
laravel 默认会对 blade 中 `{{ }}` 输出的内容进行 html 转义,导致 `` 标签被当作纯文本显示;需改用 `{!! !!}` 语法取消转义,并注意 xss 风险防范。
在 Laravel 开发中,我们常通过辅助函数封装可复用的 HTML 片段(如带预设样式的 <span></span> 元素)。例如,你已定义了 CSS 类 .subject:
.subject {
position: absolute;
color: white;
text-decoration: none;
padding: 0px 25px 12px 0px;
display: inline-block;
border-radius: 2px;
}并编写了 PHP 辅助函数:
function subject() {
return '<span class="subject"></span>';
}但在 Blade 模板中若使用 {{ subject() }} 调用,浏览器只会渲染出原始字符串 <span class="subject"></span>,而非实际的 HTML 元素——这是因为 Laravel 的 {{ }} 语法默认启用 HTML 转义(escaping),用于防止 XSS 攻击,将 、<code>> 等字符自动转换为 、<code>>。
✅ 正确做法是使用 非转义输出语法 {!! !!}:
立即学习“前端免费学习笔记(深入)”;
{!! subject() !!}此时,函数返回的 HTML 将被浏览器正常解析,渲染为一个空的、具备 .subject 样式的 <span></span> 元素。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
⚠️ 注意事项:
-
{!! !!}绕过了 Laravel 的安全转义机制,仅适用于完全可控、无用户输入的 HTML 内容; - 若函数内部拼接了用户提交的数据(如
$name),必须手动过滤或使用e()函数转义后再拼接,否则存在严重 XSS 风险; - 更推荐的工程实践是:将此类结构化 HTML 抽离为 Blade 组件(Component),既保障安全性,又提升可维护性。例如:
php artisan make:component SubjectSpan
然后在 resources/views/components/subject-span.blade.php 中定义:
<span class="subject">{{ $slot }}</span>并在模板中使用:
<x-subject-span>课程主题</x-subject-span>
这种方式天然支持属性绑定、插槽内容、类型提示与 IDE 支持,是 Laravel 8+ 推荐的标准方案。
总结:{{ }} → 安全转义(推荐用于动态内容);{!! !!} → 原生 HTML(仅限可信静态 HTML);长期项目建议优先采用 Blade 组件替代内联 HTML 字符串函数。


















