用 mb_substr 提取字符串后 N 个字符需计算起始位置为 mb_strlen($str, $encoding) - $n,显式传入长度 $n 和编码(如 'UTF-8');边界情况需判断:$n ≤ 0 返回空,$n ≥ 字符串长度可直接返回原串;封装函数 mb_substr_end 更安全易用。

用 mb_substr 提取字符串后 N 个字符,关键是正确计算起始位置:从字符串总长度减去 N 开始截取,长度设为 N。
基本用法:指定起始位置和长度
mb_substr 的签名是:mb_substr(string $str, int $start, ?int $length = null, ?string $encoding = null)
要取后 N 个字符,需:
- 计算起始位置:
mb_strlen($str, $encoding) - $n - 指定截取长度:
$n(显式传入更安全,避免超出范围时返回空) - 编码建议显式传入(如
'UTF-8'),尤其处理中文等多字节字符时
示例代码
提取后 3 个字符:
立即学习“PHP免费学习笔记(深入)”;
$str = '你好世界'; $n = 3; $result = mb_substr($str, mb_strlen($str, 'UTF-8') - $n, $n, 'UTF-8'); // 结果:'世界'
注意边界情况
当 $n 大于或等于字符串长度时,mb_substr 可能返回空或原串,建议加判断:
- 若
$n ,直接返回空字符串 - 若
$n >= mb_strlen($str, $encoding),可直接返回原字符串(或按需截断) - 起始位置为负数时,
mb_substr会从末尾倒数,但显式计算更清晰、不易出错
封装成函数更方便复用
例如:
function mb_substr_end(string $str, int $n, string $encoding = 'UTF-8'): string
{
if ($n <= 0) return '';
$len = mb_strlen($str, $encoding);
$start = max(0, $len - $n);
return mb_substr($str, $start, $n, $encoding);
}
<p>// 使用
echo mb_substr_end('Hello 世界', 4); // 输出 '界'



















