
本文介绍在 Laravel 中正确处理富文本内容时,如何彻底移除 、 等 HTML 实体字符,并结合 strip_tags() 安全提取纯文本摘要。
本文介绍在 laravel 中正确处理富文本内容时,如何彻底移除 ` `、`` 等 html 实体字符,并结合 `strip_tags()` 安全提取纯文本摘要。
在 Laravel 项目中展示博客列表时,常需从富文本内容(如 TinyMCE、CKEditor 输出)中提取简洁摘要。仅用 strip_tags() 是不够的——它仅移除 HTML 标签,但保留 HTML 实体编码(如 表示不间断空格、 表示右到左标记),这些字符在渲染后仍会显示为异常空格或乱码,影响用户体验与排版。
✅ 正确做法是:先解码 HTML 实体,再清理冗余符号,最后截取。推荐使用 PHP 原生函数组合处理,而非简单字符串替换(易漏配对、不兼容变体):
// 在控制器或访问器中(推荐封装为模型访问器)
public function getExcerptAttribute()
{
$cleanText = html_entity_decode($this->content, ENT_QUOTES | ENT_HTML5, 'UTF-8');
$cleanText = strip_tags($cleanText);
// 移除多余空白(含制表符、换行、全角/半角空格、零宽字符等)
$cleanText = preg_replace('/\s+/u', ' ', $cleanText);
$cleanText = trim($cleanText);
return Str::limit($cleanText, 100, ' …');
}
然后在 Blade 模板中直接调用:
{{ $post->excerpt }}
⚠️ 注意事项:
- ❌ 避免仅用
str_replace(' ', ' ', $str):可能以、等 Unicode 十进制/十六进制形式存在; - ✅
html_entity_decode()能统一处理所有标准 HTML 实体(包括、、等); - ?
ENT_HTML5标志确保兼容 HTML5 新增实体;UTF-8参数防止解码乱码; - ?
preg_replace('/\s+/u', ' ', ...)使用 Unicode 意识正则,可安全合并全角空格()、零宽空格()、软连字符等不可见字符; - ? 如需更高鲁棒性(如过滤 CSS/JS 注入残留),可叠加
trim(strip_tags($str))后再解码,形成双重净化。
总结:strip_tags() + html_entity_decode() + preg_replace() 三步组合,才是生产环境安全、兼容、可维护的文本摘要生成方案。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











