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

如何在Livewire父子组件间传递并渲染HTML内容?

在Livewire组件间传递并渲染HTML标签的可行方案

核心解决方案:跳过HTML转义渲染

Livewire默认会自动转义HTML内容,直接传递带<br>等标签的字符串会被当作文本输出。要实现HTML渲染,只需在子组件的Blade视图中使用未转义输出语法{!! $变量名 !!}:

示例代码

  1. 父组件传递带HTML的变量:
<livewire:hero :hero_text="$hero_text" />
// 或Blade组件语法
<x-hero :hero_text="$hero_text" />

其中$hero_text的值可以是类似'主标题<br>副标题'的字符串。

  1. 子组件的Blade视图(resources/views/livewire/hero.blade.php):
<div class="hero-section">
    {!! $hero_text !!}
</div>

关键注意事项:XSS安全防护

直接渲染未过滤的HTML存在XSS攻击风险,尤其是当$hero_text包含用户输入内容时,必须先做净化处理:

  • 允许指定标签:用Laravel字符串方法保留安全标签,过滤其他标签:
$safeHeroText = \Illuminate\Support\Str::of($hero_text)->stripTags(['<br>', '<p>', '<strong>'])->toString();
  • 全面HTML净化:使用spatie/laravel-html-sanitizer包,配置允许的标签和属性后对内容做彻底净化:
$purifiedText = \Spatie\HtmlSanitizer\HtmlSanitizer::create()->sanitize($hero_text);

替代方案:使用插槽传递HTML

如果不需要通过变量传递,也可以直接用Blade插槽传递HTML内容,同样能实现多样配置:
父组件:

<livewire:hero>
    主标题<br><small>副标题</small>
</livewire:hero>

子组件视图:

<div class="hero-section">
    {{ $slot }}
</div>

内容的提问来源于stack exchange,提问作者rovac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:07:35