Here is a userland implementation that can be included in code that needs to support PHP 8.3 and below:
<?php
if (!function_exists('grapheme_str_split')) {
function grapheme_str_split(string $string, int $length = 1): array|false
{
if ($length < 1) {
throw new \ValueError('Argument #2 ($length) must be greater than 0 and less than or equal to 1073741823');
}
try {
return preg_split('/(\X{' . $length . '})/u', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
} catch (\Throwable $e) {
return false;
}
}
}
?>