
本文详解如何正确使用 echo 与 substr() 在单行 php 语句中截取并输出字符串,纠正常见语法错误,并提供安全、可读性强的实战写法。
本文详解如何正确使用 echo 与 substr() 在单行 php 语句中截取并输出字符串,纠正常见语法错误,并提供安全、可读性强的实战写法。
在 PHP 开发中,常需对数据库内容(如文章摘要)进行字符截断后展示,例如在博客首页仅显示前 50 个字符。初学者易误写为 substr(echo $str, 0, 50)——这是语法错误:echo 是语言结构(非函数),不可作为 substr() 的参数;substr() 本身返回字符串,需由 echo 输出。
✅ 正确写法是:先用 substr() 处理字符串,再用 echo 输出结果,二者组合在一行中:
<p class="card-text"><?php echo substr($q['content'], 0, 50); ?></p>
若需添加省略号(…)以提升用户体验,可增强逻辑(注意避免截断中途产生乱码):
<p class="card-text">
<?php
$excerpt = substr($q['content'], 0, 50);
// 确保不截断在中文/UTF-8多字节字符中间(基础防护)
$excerpt = mb_substr($q['content'], 0, 50, 'UTF-8');
echo $excerpt . (mb_strlen($q['content'], 'UTF-8') > 50 ? '…' : '');
?>
</p>⚠️ 关键注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 必须使用 mb_substr() 替代 substr() 处理中文等 UTF-8 字符串,否则可能造成乱码或截断异常;
- substr() 的第三个参数是长度(非结束位置),substr($str, 0, 50) 表示从第 0 位起取 50 个字符;
- 不要尝试“嵌套” echo(如 substr(echo ...)),这会直接导致 PHP 解析失败;
- 若需响应式截断(按行数而非字符数),推荐前端 CSS 方案(如 -webkit-line-clamp),但需注意 SEO 与无障碍访问——服务端截断仍更可靠、可控。
综上,一行安全截取输出的推荐写法(兼顾 UTF-8 兼容性与可读性):
<?php echo mb_substr($q['content'], 0, 50, 'UTF-8') . (mb_strlen($q['content'], 'UTF-8') > 50 ? '…' : ''); ?>
该方案简洁、健壮,适用于 CMS、博客、新闻列表等各类内容摘要场景。











