mb_str_split

(PHP 7 >= 7.4.0, PHP 8)

mb_str_split给定一个多字节字符串,返回其字符的数组

说明

mb_str_split(string $string, int $length = 1, ?string $encoding = null): array

此函数将返回一个字符串数组,它是 str_split() 的版本,支持可变字符大小的编码以及 1、2 或 4 字节字符的固定大小编码。如果指定了 length 参数,则字符串将被分解为指定长度的字符块(而不是字节)。可以可选地指定 encoding 参数,并且这样做是良好的做法。

参数

string

要拆分为字符或块的 string

length

如果指定,则返回数组的每个元素将由多个字符组成,而不是单个字符。

encoding

encoding 参数是字符编码。如果省略或为 null,将使用内部字符编码值。

指定支持的编码之一的字符串。

返回值

mb_str_split() 返回一个字符串数组。

变更日志

版本 说明
8.0.0 encoding 现在可以为空。
8.0.0 此函数不再在失败时返回 false

参见

添加备注

用户贡献的备注 3 备注

7
webmaster at redinfo dot co dot kr
1 年前
if( !function_exists('mb_str_split')){
function mb_str_split( $string = '', $length = 1 , $encoding = null ){
if(!empty($string)){
$split = array();
$mb_strlen = mb_strlen($string,$encoding);
for($pi = 0; $pi < $mb_strlen; $pi += $length){
$substr = mb_substr($string, $pi,$length,$encoding);
if( !empty($substr)){
$split[] = $substr;
}
}
}
return $split;
}
}
7
info at ensostudio dot ru
3 年前
注意:如果无法转换参数类型,则函数将返回 NULL。

基于包“symfony/polyfill-mbstring”的 PHP < 7.4 的 Polyfill
<?php
function mb_str_split($string, $split_length = 1, $encoding = null)
{
if (
null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) {
trigger_error('mb_str_split(): expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING);
return
null;
}
if (
null !== $split_length && !\is_bool($split_length) && !\is_numeric($split_length)) {
trigger_error('mb_str_split(): expects parameter 2 to be int, '.\gettype($split_length).' given', E_USER_WARNING);
return
null;
}
$split_length = (int) $split_length;
if (
1 > $split_length) {
trigger_error('mb_str_split(): The length of each segment must be greater than zero', E_USER_WARNING);
return
false;
}
if (
null === $encoding) {
$encoding = mb_internal_encoding();
} else {
$encoding = (string) $encoding;
}

if (!
in_array($encoding, mb_list_encodings(), true)) {
static
$aliases;
if (
$aliases === null) {
$aliases = [];
foreach (
mb_list_encodings() as $encoding) {
$encoding_aliases = mb_encoding_aliases($encoding);
if (
$encoding_aliases) {
foreach (
$encoding_aliases as $alias) {
$aliases[] = $alias;
}
}
}
}
if (!
in_array($encoding, $aliases, true)) {
trigger_error('mb_str_split(): Unknown encoding "'.$encoding.'"', E_USER_WARNING);
return
null;
}
}

$result = [];
$length = mb_strlen($string, $encoding);
for (
$i = 0; $i < $length; $i += $split_length) {
$result[] = mb_substr($string, $i, $split_length, $encoding);
}
return
$result;
}
?>
-7
vovan-ve at yandex dot ru
3 年前
仅针对 UTF-8 的延迟 Polyfill

function utf8_str_split(string $input, int $splitLength = 1)
{
$re = \sprintf('/\\G.{1,%d}+/us', $splitLength);
\preg_match_all($re, $input, $m);
return $m[0];
}
To Top