PHP: многобайтовый разветвитель строк UTF-8?

Может ли это работать для разделения многобайтовой строки каждые десять символов?

$string = 'Star Wars Episode Seven Sucked';
mb_split('.', $string, 10);

Руководство по PHP говорит, что str_split() работает с байтами, а не с символами в многобайтовых строках. Это означает mb_split() Казалось бы, естественная «перегруженная» замена, но две функции (str_split() а также mb_split()) имеют разные сигнатуры функций и не являются, так сказать, «друзьями по перегрузке». Тогда у меня возникла мысль, а что с этим?

mb_internal_encoding("UTF-8");
$string = 'Star Wars Episode Seven Sucked';
$tokens = [];

for($i = 0, $length = mb_strlen($string); $i < $length; $i += 10)
{
$tokens[] = mb_substr($string, $i, 10, 'UTF-8');
}

print_r($tokens);

-4

Решение

function mb_utf8_split($string, $interval)
{
$tokens = [];
mb_internal_encoding('UTF-8');

$stringEncoding = mb_detect_encoding($string, 'UTF-8, ISO-8859-1', true);

if(!$stringEncoding)
{
throw new RuntimeException("Unable to identify character encoding.");
}

if($stringEncoding !== 'UTF-8')
{
$string = mb_convert_encoding($string, 'UTF-8', $stringEncoding);
}

for($i = 0, $length = mb_strlen($string); $i < $length; $i += $interval)
{
$tokens[] = mb_substr($string, $i, $interval, 'UTF-8');
}

return $tokens;
}
-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]