PHP 7.4起推荐用mb_str_split()处理中文、emoji等多字节字符,按字符而非字节分割;str_split()仅适用于纯ASCII或等长切片,两者不可混用,否则易致乱码或报错。

PHP 7.4 中字符串分割推荐优先使用 mb_str_split() 处理多字节字符(如中文、emoji),同时保留 str_split() 用于纯 ASCII 或等长切片场景。两者分工明确,用错容易导致乱码或报错。
中文/UTF-8 字符必须用 mb_str_split()
PHP 7.4 正式引入 mb_str_split(),专为多字节编码设计,按“字符”而非“字节”拆分:
-
mb_str_split("你好世界", 1, 'UTF-8')→['你', '好', '世', '界'] -
mb_str_split("Hello?", 2)→['He', 'll', 'o?'](正确识别 emoji) - 第三个参数
$encoding建议显式传入'UTF-8',避免依赖内部编码设置
英文数字符号可用 str_split() 快速切分
对纯 ASCII 字符串(如密码、MD5、日志片段),str_split() 更轻量高效:
-
str_split("abc123")→['a','b','c','1','2','3'] -
str_split("a1b2c3d4", 2)→['a1','b2','c3','d4'] - 长度超出原字符串时,返回单元素数组:
str_split("hi", 10)→['hi'] - 注意:PHP 8.0+ 起,若传入负数或 0 作长度,会抛出
ValueError;7.4 中仍返回false
不满足需求时的替代方案
当需要按分隔符(如逗号、换行)或正则规则分割,就该换函数:
立即学习“PHP免费学习笔记(深入)”;
- 有明确分隔符 → 用
explode(",", $str) - 需支持正则匹配(如按空白+标点混合切分)→ 用
preg_split('/[\s,。!?;]+/u', $str) - 要保留分隔符本身 → 改用
preg_split()加PREG_SPLIT_DELIM_CAPTURE标志
兼容低版本 PHP 的写法
若项目仍在 PHP 7.3 或更低版本,可手动实现 mb_str_split 功能:
- 用
mb_substr()循环截取:for ($i = 0; $i - 或用正则:
preg_match_all('/./u', $str, $matches); $arr = $matches[0]; - 注意:空字符串输入时,
mb_strlen()返回 0,循环不会执行,结果为空数组,符合预期



















