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

Laravel为何将侧边栏包裹在em标签中?附布局异常问题

解决Laravel Blade模板渲染后侧边栏被意外嵌套em标签的问题

看起来你遇到的核心问题是Blade模板渲染时意外生成了未在代码中定义的<em>标签,导致Bootstrap的栅格布局被破坏,侧边栏从右侧跑到了内容下方。结合你提供的代码和现象,我来帮你一步步排查解决:

一、问题根源定位

你提到Chrome开发者工具发现侧边栏被嵌套在<em>标签里,而代码中并没有写这个标签,这大概率是Blade模板解析时的语法错误或内容异常导致的HTML渲染混乱——最常见的原因是未转义输出的富文本内容里存在未闭合的HTML标签,打乱了整个页面的结构层级,后续的侧边栏、页脚都会被错误地嵌套进未闭合的标签里。

看你提供的index.blade.php代码,有一处需要重点排查:

<p class="card-text">{!! str_limit($post->body,200,'...')!!}</p>

这里的{!! ... !!}是Laravel的未转义输出指令,如果被删除的那篇文章(或其他文章)的$post->body字段里包含未闭合的HTML标签(比如用户输入的<em>测试内容没写</em>),就会导致浏览器解析HTML时出现结构错乱,把后续的侧边栏、页脚都包裹进这个未闭合的<em>里。

二、分步解决方案

1. 临时验证问题原因

先快速验证是不是富文本内容的问题:

  • 把上面的未转义输出临时改成转义输出:
    <p class="card-text">{{ str_limit($post->body,200,'...') }}</p>
    
    然后测试删除文章后,侧边栏是否恢复正常。如果恢复了,说明就是某篇文章的body字段里有未闭合的HTML标签。

2. 安全处理富文本内容

如果你确实需要保留富文本格式,一定要确保内容的HTML结构完整:

  • 可以用strip_tags()过滤危险标签,只允许安全的HTML标签存在:
    <p class="card-text">{!! str_limit(strip_tags($post->body, '<p><b><i><u>'),200,'...')!!}</p>
    
    上面的代码只保留<p>、<b>、<i>、<u>这些安全标签,其他未闭合的标签都会被过滤,避免破坏页面结构。
  • 进阶方案可以引入HTMLPurifier库,更专业地清理和规范富文本内容,彻底避免未闭合标签的问题。

3. 清除视图缓存(必做)

Laravel会缓存编译后的Blade视图,有时候旧缓存会导致异常渲染,执行以下命令清除视图缓存:

php artisan view:clear

之前你只清除了应用缓存,视图缓存是单独存储的,一定要执行这个命令。

4. 检查模板语法闭合

再快速核对一遍Blade指令和HTML标签的闭合情况:

  • 确认@if、@foreach等指令都有对应的@endif、@endforeach(你的代码里这部分是没问题的,但再核对更稳妥);
  • 检查页面中的<div>、<section>等容器标签是否都正确闭合,比如index.blade.php里的.row容器是否有对应的闭合标签。

三、验证流程

  1. 先执行php artisan view:clear清除视图缓存;
  2. 临时替换富文本输出为转义输出,测试删除文章后页面布局是否正常;
  3. 如果布局恢复,再针对性处理文章内容的HTML标签问题,使用strip_tags()或专业库规范富文本;
  4. 最后恢复富文本输出,再次测试页面布局。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:01:13