PHP字符串截取首选substr()处理ASCII字符,mb_substr()用于中文等多字节安全截取,strstr()等按分隔符动态截取,strpos()+substr()组合实现灵活定位截取。

PHP字符串截取有多个函数可用,选哪个主要看你要处理的内容类型和具体需求。
基础单字节截取:substr()
适合纯英文、数字、ASCII字符的快速截取。它按字节操作,效率高,但不支持中文等多字节字符的安全截取。
- 从开头取5个字符:
substr("Hello World", 0, 5)→ "Hello" - 从第7位开始取到末尾:
substr("Hello World", 6)→ "World" - 从末尾倒数取4个字符:
substr("file.txt", -4)→ ".txt"
中文/多字节安全截取:mb_substr()
处理含中文、日文、emoji等UTF-8字符串时必须用它,按“字符”而非“字节”计数,避免乱码或截断。
- 需指定编码(如UTF-8),否则可能失效:
mb_substr("你好世界", 0, 2, "UTF-8")→ "你好" - 中英文混合也准确:
mb_substr("Hello,你好!", 0, 6, "UTF-8")→ "Hello,你" - 注意:服务器需启用mbstring扩展,否则会报错
按分隔符动态截取:strstr()、strrchr()、explode()
不靠固定长度,而是根据某个字符或子串的位置来切分,适合结构化文本处理。
立即学习“PHP免费学习笔记(深入)”;
-
strstr("user@example.com", "@")→ "@example.com"(首次出现起的剩余部分) -
strstr("user@example.com", "@", true)→ "user"(@之前的部分) -
strrchr("path/to/file.txt", "/")→ "/file.txt"(最后一次/起的后半段) -
explode(".", "file.txt")[0]→ "file"(按点分割取第一段)
结合查找+截取:strpos() + substr()
更灵活的组合方式,先定位,再截取,适合复杂逻辑(比如“取域名前缀”、“提取URL路径”)。
- 找第一个逗号位置,取前面内容:
$pos = strpos($str, ","); substr($str, 0, $pos) - 找最后一个斜杠,取后面文件名:
$pos = strrpos($path, "/"); substr($path, $pos + 1) - 记得检查
$pos !== false,避免找不到时出错



















