先用 strip_tags() 去除 HTML 标签,再用 substr() 或 mb_substr() 截取,可避免标签截断残留;需注意字符编码与截断位置安全性。

直接用 strip_tags() 去掉 HTML 标签,再配合 substr() 或 mb_substr() 截取,是最常用也最稳妥的方式——但要注意编码和截断位置的安全性。
先去标签,再截取(推荐)
富文本通常含 HTML 标签、换行、多余空格。直接截取可能切在标签中间,导致残留 `
- 用
strip_tags($html)移除所有标签,保留纯文本内容 - 用
trim()去首尾空白,preg_replace('/s+/', ' ', ...)合并连续空白为单个空格 - 用
mb_substr($text, 0, $len, 'UTF-8')安全截取(尤其含中文时,substr会乱码)
避免截断在半句话或单词中间
硬截取可能把“详细介绍…”切成“详细介…”,体验差。可加简单语义处理:
- 截取后用
mb_strrpos($str, ' ', -10)往回找最近的空格,让结尾更自然 - 或匹配句号、问号、感叹号后截断:
mb_ereg_replace('^(.{0,100}[^.!?]*[.!?]).*', '\1', $text) - 若要求严格,可结合
mb_wordwrap()或分词库,但一般场景不必要
注意特殊字符和实体编码
strip_tags() 不解码 HTML 实体(如 & → &, → 空格),需手动处理:
立即学习“PHP免费学习笔记(深入)”;
- 用
html_entity_decode($text, ENT_QUOTES, 'UTF-8')转义后再清理空白 - 对
、、<code>>等常见实体,也可用str_replace()预处理 - 避免多次 decode 导致重复转义,建议只做一次且放在
strip_tags之后
封装成函数,一步到位
例如:
function htmlToExcerpt($html, $length = 100) {
$text = strip_tags($html);
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
$text = preg_replace('/s+/', ' ', trim($text));
if (mb_strlen($text, 'UTF-8') <= $length) {
return $text;
}
$excerpt = mb_substr($text, 0, $length, 'UTF-8');
$lastSpace = mb_strrpos($excerpt, ' ');
if ($lastSpace !== false) {
$excerpt = mb_substr($excerpt, 0, $lastSpace, 'UTF-8');
}
return rtrim($excerpt) . '…';
}



















