Laravel商品页面Meta Description如何正确过滤 与多余空格?
如何正确过滤商品页面的Meta Description
首先,咱们先拆解问题:你当前的代码已经做了基础的HTML标签剥离和长度截取,但确实漏掉了HTML实体处理和多余空白的清理——这就是为什么会出现 和乱空格的原因。下面给你一套完整的优化方案,每一步都精准解决一个问题:
完整优化代码
@section('meta-desc', function() use ($product) { // 1. 解码所有HTML实体(把 、&这类转成普通文本) $cleanContent = html_entity_decode($product['content'], ENT_QUOTES | ENT_HTML5, 'UTF-8'); // 2. 移除剩余的HTML标签 $cleanContent = strip_tags($cleanContent); // 3. 把所有连续空白(空格、换行、制表符)替换成单个空格 $cleanContent = preg_replace('/\s+/', ' ', $cleanContent); // 4. 去除首尾多余空格 $cleanContent = trim($cleanContent); // 5. 多字节安全截取长度,按需添加省略号 $maxLength = 157; if (mb_strlen($cleanContent) > $maxLength) { // 可选:避免截断单词(不需要的话直接用mb_substr即可) $truncated = mb_substr($cleanContent, 0, $maxLength); $lastSpacePos = mb_strrpos($truncated, ' '); if ($lastSpacePos !== false) { $cleanContent = mb_substr($truncated, 0, $lastSpacePos) . '...'; } else { $cleanContent = $truncated . '...'; } } return $cleanContent; })
每一步的作用解释
- html_entity_decode:这是解决
问题的核心——它会把HTML实体转换成对应的普通字符(比如 转成空格),不然这些实体就会原封不动出现在Meta描述里。指定UTF-8编码是为了和mb_substr的多字节处理保持一致,避免中文等字符乱码。 - strip_tags:你原来的代码已经在用,但放在实体解码之后更合理,确保所有标签都被彻底移除。
- preg_replace('/\s+/', ' ', $cleanContent):把内容里的连续空格、换行符、制表符等都换成单个空格,避免Meta描述里出现一堆乱糟糟的空白。
- trim:去掉内容首尾的空格,确保描述开头不会空落落的,更整洁。
- 智能截取长度:原来的代码不管内容长短都加
...,这里先判断长度,只有内容超过157字符时才添加。另外加了“避免截断单词”的逻辑,让Meta描述读起来更通顺(如果不需要这个逻辑,直接用mb_substr($cleanContent, 0, $maxLength) . '...'就行)。
额外注意点
- 确保你的页面编码是UTF-8,所有字符串处理函数都用多字节版本(比如
mb_strlen、mb_substr),避免中文等多字节字符被截断乱码。 - 如果
$product['content']可能包含其他特殊实体(比如©、®),html_entity_decode也会一并处理,让描述更自然。
内容的提问来源于stack exchange,提问作者Jajaja
相关产品推荐
相关产品推荐

