preg_split возвращает целую строку (юникод) - PullRequest
0 голосов
/ 03 ноября 2018

Мне нужна функция charAt для строк utf8.

Если я кодирую это так, это работает, но это слишком медленно, так как должно работать с очень длинными строками.

public static function utf8_charAt($str, $num)
{
    return mb_substr($str, $num, 1, 'UTF-8');
}

Итак, немного погуглив, я нашел альтернативу, которая могла бы быть быстрее.

public static function utf8_charAt($str, $num)
{
    $split = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
    return $split[$num];
}

Теперь странная часть:

Для некоторых строк функция preg_split просто возвращает массив со всей входной строкой в ​​качестве единственного элемента.

При отладке это выглядит так:

Debug screen

Строка ввода со скриншота:

陘⊇7觬ࠒ肃⠈秀菂о 舏ꁀ車ń၀ꂀᒂƨ࠺텀脼舁㳸⁀态丌였ᯠ₀胸耉ᠷ䠠켠脳䄁︀Ȍרࠃ䰀⛠眰䀻₁ᙁƓȃ씄੖ࠖࠐ∘‘絠臱섁봂ف̘ஜနᠠ⬠㲀◁ö舄씄ֺࠊ䰐┸–䁀䢀肛脁菁±聵䄁ì섁持ũ䄀솁ā䝁ù脁龁ƴ䄁쒁상䌁䅁č脁ꒁEĀ餁K脁獁ǒ脁᳁ğ肝Ź섁䤁ųĀࣁ䄀薁Ġ脀鍁āĀ䪁Ŭ섁ꃁa섀佁Ǿ䄁㭀7©䄀鳁댁䄁}䄁굁Ǭ脀ぁĦ脀剁䄀❁Ŵ老欀沁{耀ꬁ䷁į䄀锁

Я еще не видел никакой последовательности, но на некоторых строках это работает как задумано. К несчастью, это наименее.

...