最常用方法是substr($str, -n)截取字符串后n位;若需限定长度可加第三个参数,如substr($str, -3, 3);为防越界应先用strlen()判断长度,多字节字符推荐mb_substr()。

PHP 截取字符串后几位,最常用、最直接的方法就是用 substr() 函数配合负数起始位置参数。
substr 用负数截取末尾字符
当 substr($str, $start) 的 $start 为负数时,表示从字符串末尾往前数第 |$start| 个位置开始截取,一直取到末尾。
- substr("hello world", -5) → 返回 "world"(从倒数第5个字符开始,到结尾)
- substr("php8.3", -1) → 返回 "3"(最后一个字符)
- substr("abcde", -2) → 返回 "de"
截取后几位并限定长度(可选)
如果还需要控制截取多少个字符(比如只要最后3位,但原字符串可能不足3位),可以传第三个参数 $length:
- substr("test", -3, 3) → "est"
- substr("hi", -3, 3) → 实际返回 "hi"(不够3位就返回全部)
- 注意:$length 为负数时,表示“从末尾往前再删掉若干字符”,一般不用于单纯取后几位,容易混淆,建议避免
安全处理:防止负数超出范围
如果字符串长度小于绝对值的负数起始位(例如 substr("a", -5)),substr 会静默返回 false 或空字符串(PHP 8+ 返回空字符串,旧版本可能返回 false)。建议加判断:
立即学习“PHP免费学习笔记(深入)”;
- 先用 strlen() 检查长度:strlen($str) >= 3 ? substr($str, -3) : $str
- 或用 strrev + substr + strrev 组合(不推荐,效率低,仅作了解)
其他替代写法(了解即可)
虽然 substr($str, -n) 是标准做法,但也有其他方式:
- substr($str, strlen($str) - 3) —— 等效但冗长,不推荐
- preg_match('/.{1,3}$/', $str, $m) ? $m[0] : '' —— 正则可行但小题大做
- mb_substr($str, -3, null, 'UTF-8') —— 多字节安全,中文等需用这个



















