Для функций mb_...
необходимо указать кодировку кодировки.
В вашем примере кода это, в частности, следующие две строки:
$strLen = mb_strlen($str, 'UTF-8');
$arr[] = mb_substr($str, $i, $len, 'UTF-8');
Полная картинка:
function utf8Split($str, $len = 1)
{
$arr = array();
$strLen = mb_strlen($str, 'UTF-8');
for ($i = 0; $i < $strLen; $i++)
{
$arr[] = mb_substr($str, $i, $len, 'UTF-8');
}
return $arr;
}
Потому что вы используете UTF-8 здесь.Однако, если входные данные не закодированы должным образом, это больше не будет работать «просто» - только потому, что оно не было разработано для чего-то другого.
Вы можете поочередно обрабатывать строки в кодировке UTF-8 с помощью регулярных выражений PCRE.Например, это вернет то, что вы ищете в меньшем количестве кода:
$str = 'Zelf heb ik maar één vraag: wie ben jij?';
$chars = preg_split('/(?!^)(?=.)/u', $str);
Рядом с preg_split
есть также mb_split
.