php substr 用法详解:截取、负数与中文处理

2026-11-03 0 5

substr 的基本用法

substr(string $string, int $offset, ?int $length = null): string 用于从字符串中截取一段。$offset 是起始位置,从 0 开始计数;$length 为可选长度,省略时截取到字符串末尾。

echo substr(“hello world”, 6); // world

echo substr(“hello world”, 0, 5); // hello

第三个参数传 0 会返回空字符串,而不是剩余部分,这一点常被误用。

负数偏移与负数长度

$offset 为负数时,从字符串末尾倒数开始。$length 为负数时,表示从末尾去掉多少个字符。

echo substr(“hello world”, -5); // world

echo substr(“hello world”, 0, -6); // hello

echo substr(“hello world”, -5, 3); // wor

负数组合适合去掉固定后缀、取文件名扩展名之前的名称等场景,比正则更轻量。

返回值与边界情况

当 $offset 超出字符串长度时,PHP 8 起返回空字符串,早期版本返回 false。截取结果为空也会返回空字符串。因此做严格判断时,建议先用 strlen 校验长度,或统一按字符串处理,避免混淆 false 与 ""。

另外,$offset 等于字符串长度时返回空字符串,不是错误。

中文与多字节字符的坑

substr 按字节截取,对 UTF-8 编码的中文,一个汉字通常占 3 个字节,直接截取很容易出现乱码或半个字符。

$str = “你好世界”;

echo substr($str, 0, 3); // 可能输出乱码

处理中文、emoji 等多字节内容,应改用 mbsubstr($str, $start, $length, 'UTF-8')。mbsubstr 的参数语义与 substr 一致,支持负数,但按字符而非字节计数。使用前需确认 mbstring 扩展已启用。

实用建议

需要按字节处理二进制数据、ASCII 文本时用 substr;涉及用户输入、中文文案、URL 参数时优先用 mb_substr。截取前明确编码,固定传 'UTF-8',可减少环境差异带来的问题。对性能敏感的大循环,substr 比正则更快,但可读性上仍应优先保证意图清晰。

看过这篇文章的人,推荐看以下内容

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

版权声明:所有的源码、软件和资料,不得使用于非法商业用途,不得违反国家法律,一切关于该资源商业行为与本站无关。

免费cms模板 建站百科 php substr 用法详解:截取、负数与中文处理 https://www.mianfeicms.com/12331.html

我是签名

相关文章

猜你喜欢
发表评论
暂无评论