
在 Laravel 9 中使用 SummerNote 存储富文本后,若用 Str::of()->limit() 截取并渲染 Blade 模板时内容为空,应改用 Str::limit() 直接处理字符串,避免 Str::of() 链式调用在 Blade 中因上下文或空值导致的渲染异常。
在 laravel 9 中使用 summernote 存储富文本后,若用 {!! str::of($item->product_description)->limit(40) !!} 渲染时内容显示为空或异常,根本原因在于 str::of() 返回的是一个可链式调用的 illuminate\support\stringable 实例,而 limit() 方法在该实例上调用后仍返回 stringable 对象——blade 的 {!! !!} 会尝试调用其 __tostring(),但当原始内容为 null、空字符串或含非法 html 结构时,可能触发静默失败或意外截断。
正确的做法是直接使用 Laravel 内置的字符串辅助函数 Str::limit(),它专为安全截断 HTML 富文本设计:自动保留标签完整性(不切断开闭合标签),并在末尾添加省略号,且对空值和 null 具有鲁棒性。
✅ 推荐写法:
{!! Str::limit($item->product_description, 40, '...') !!}
⚠️ 注意事项:
- 不要嵌套 Str::of() + limit(),Str::limit() 已内置 Stringable 封装,更简洁可靠;
- 若字段可能为 null,建议配合空合并操作符增强健壮性:
{!! Str::limit($item->product_description ?? '', 40) !!} - Str::limit() 默认保留 HTML 标签结构,但不会过滤 XSS;如需安全渲染,应在存储前用 htmlspecialchars() 或前端库净化,而非依赖 Blade 输出转义(因为 {!! !!} 本身禁用转义);
- 如需进一步提取纯文本(去除所有 HTML 标签后再截取),可用:
{!! Str::limit(strip_tags($item->product_description), 40) !!}
总结:Str::limit() 是 Laravel 官方推荐的富文本安全截取方案,兼顾语义清晰、容错性强与 HTML 友好性,应作为 Blade 中处理 SummerNote 等富文本字段的默认选择。











