
本文详解如何在 php 模板中正确组合 echo 与 substr() 函数,安全、简洁地截取字符串并输出,避免语法错误,同时提供 css 备选方案与实用注意事项。
本文详解如何在 php 模板中正确组合 echo 与 substr() 函数,安全、简洁地截取字符串并输出,避免语法错误,同时提供 css 备选方案与实用注意事项。
在 PHP 开发中,常需对文章摘要、卡片内容等文本做长度限制(如仅显示前 50 个字符),以提升页面可读性与加载性能。初学者容易误写成 substr(echo $str, 0, 50) 这类语法错误——因为 echo 是语言结构(statement),不能作为函数参数;而 substr() 是函数,必须先处理字符串,再输出结果。
✅ 正确写法(推荐):
将 substr() 的返回值直接传给 echo:
<p class="card-text">
<?php echo substr($q['content'], 0, 50); ?>
</p>⚠️ 注意事项:
- substr($str, $start, $length) 第二个参数为起始位置(从 0 开始),第三个参数为截取长度;
- 若原文长度不足 50 字符,substr() 自动返回全部内容,不会报错;
- 中文、emoji 或 UTF-8 多字节字符可能被截断乱码(如 "你好世界" → substr(..., 0, 5) 可能输出 "你好世")。此时应改用 mb_substr()(需启用 mbstring 扩展):
<p class="card-text">
<?php echo mb_substr($q['content'], 0, 50, 'UTF-8'); ?>
</p>? 进阶建议:添加省略号(…)增强语义
单纯截断易造成语义不完整,推荐追加省略号(注意判断是否真有截断):
<?php
$content = $q['content'];
$excerpt = mb_substr($content, 0, 50, 'UTF-8');
$hasMore = mb_strlen($content, 'UTF-8') > 50;
?>
<p class="card-text">
<?php echo htmlspecialchars($excerpt); ?><?php echo $hasMore ? '…' : ''; ?>
</p>? 安全提醒:始终对输出内容进行 htmlspecialchars() 转义,防止 XSS 攻击(尤其当 $q['content'] 来自用户输入时)。
? 替代方案:纯 CSS 截断(适用于样式优先场景)
若仅需视觉截断且无需服务端逻辑,CSS 方案更轻量、响应式友好:
<style>
.card-text {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3; /* 显示 3 行 */
overflow: hidden;
line-height: 1.5;
max-height: 4.5em;
}
</style>或单行省略(带 text-overflow: ellipsis):
立即学习“PHP免费学习笔记(深入)”;
.card-text {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 300px;
}✅ 总结:
- echo substr($str, 0, N) 是最直接可靠的 PHP 截断方式;
- 处理中文/多字节字符务必用 mb_substr() + 指定 'UTF-8' 编码;
- 输出前执行 htmlspecialchars() 是安全开发的强制习惯;
- CSS 截断适合静态展示,PHP 截断适用于 SEO、API 或需精确控制摘要内容的场景。











