
Laravel Blade 默认会对双花括号 {{ }} 中的内容进行 HTML 转义,防止 XSS 攻击;若需渲染原始 HTML(如动态生成的带 class 的 ),必须使用 {!! !!} 语法取消转义,并注意确保内容可信。
laravel blade 默认会对双花括号 `{{ }}` 中的内容进行 html 转义,防止 xss 攻击;若需渲染原始 html(如动态生成的带 class 的 ``),必须使用 `{!! !!}` 语法取消转义,并注意确保内容可信。
在 Laravel 中,当你定义一个返回 HTML 字符串的辅助函数(例如生成带 CSS 类的 标签),并在 Blade 模板中调用时,必须区分「显示文本」与「渲染 HTML」两种场景。
你当前的函数定义是正确的:
function subject() {
return '<span class="subject"></span>';
}
但问题出在模板调用方式上:
✅ 正确方式(渲染 HTML):
{!! subject() !!}
❌ 错误方式(仅输出转义后的字符串):
{{ subject() }} {{-- 输出:<span class="subject"></span> --}}
Blade 的 {{ }} 会自动调用 htmlspecialchars(),将 、>、" 等字符转义为 HTML 实体,因此你看到的是源码而非渲染后的元素。
而 {!! !!} 表示「不转义输出」(Unescaped Output),它会直接将字符串作为 HTML 插入 DOM —— 这正是你需要的效果。
⚠️ 重要安全提醒:
仅对完全可控、无用户输入参与的 HTML 使用 {!! !!}。若函数参数或内容可能来自表单提交、URL 参数、数据库字段等不可信来源,请务必先过滤(如使用 e() 或 strip_tags())或改用其他安全方案(如组件化封装)。
✅ 推荐进阶实践:使用 Blade 组件替代全局函数,提升可维护性与安全性:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
php artisan make:component SubjectSpan
resources/views/components/subject-span.blade.php:
<span class="subject">{{ $slot }}</span>
然后在模板中使用:
<x-subject-span>课程主题</x-subject-span>
这种方式天然支持属性绑定、插槽内容、CSS 隔离,且无需手动处理转义,是 Laravel 官方推荐的现代写法。
总结:{!! !!} 是解决“HTML 字符串不渲染”问题的快捷方案,但应谨慎使用;长期项目建议优先采用 Blade 组件或 @include + 数据传递的方式,兼顾安全性与可扩展性。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










