php 8.0 引入的 mb_str_split() 函数可以直接将多字节字符串按字符切分为数组,无需手动计算字节偏移或使用正则表达式。调用时只需传入目标字符串和可选的分片长度(默认为1),它会自动处理 utf-8 等多字节编码,返回一个包含所有独立字符的索引数组。

mb_str_split() 默认行为与基础用法
在默认情况下,不指定第二个参数时,mb_str_split() 会将字符串中的每个字符(包括多字节字符)作为一个独立的元素放入数组中。这对于需要逐个处理字符的场景非常有用,例如统计字数或进行字符级加密。
<?php $str = "Hello, 世界!"; $result = mb_str_split($str); print_r($result);
上述代码的输出结果如下:
Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
[5] => ,
[6] =>
[7] => 世
[8] => 界
[9] => !
)可以看到,中文“世界”被正确地识别为两个独立的元素,而不是被拆分成乱码字节。这是因为它内部使用了 mb_strlen() 的逻辑来定位字符边界。
立即学习“PHP免费学习笔记(深入)”;
指定分片长度后的切分效果
当传入第二个参数 $length 时,函数会尝试每 $length 个字符为一组进行切分。如果字符串长度不能被 $length 整除,最后一组将包含剩余的字符。这种模式适用于需要将长文本分段处理的场景,比如分页显示或批量处理。
<?php $str = "Hello, 世界!"; $result = mb_str_split($str, 3); print_r($result);
运行上述代码,输出结果为:
Array
(
[0] => Hel
[1] => lo,
[2] =>
[3] => 世
[4] => 界!
)这里我们指定了长度为3。前三个字符 “Hel” 成为第一个元素,接下来的 “lo,” 成为第二个,空格成为第三个,“世” 成为第四个,最后的 “界!” 因为不足3个字符,作为最后一个元素完整保留。需要注意的是,$length 必须大于0,否则会抛出 ValueError。
处理空字符串与特殊字符的情况
当输入为空字符串时,mb_str_split() 会返回一个空数组。对于包含特殊 Unicode 字符(如 Emoji 或组合字符)的情况,该函数基于字符而非字节进行分割,因此能保持字符的完整性。然而,如果字符串中包含不可分割的组合字符序列,它们通常会被视为单个字符单元。此外,如果提供的 $length 参数小于1,函数将抛出异常,因此在实际应用中应确保参数合法性。



















