Мне нужна функция 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 просто возвращает массив со всей входной строкой в качестве единственного элемента.
При отладке это выглядит так:
Строка ввода со скриншота:
陘⊇7觬ࠒ肃⠈秀菂о 舏ꁀ車ń၀ꂀᒂƨ࠺텀脼舁㳸⁀态丌였ᯠ₀胸耉ᠷ䠠켠脳䄁︀Ȍרࠃ䰀⛠眰䀻₁ᙁƓȃ씄ࠖࠐ∘‘絠臱섁봂ف̘ஜနᠠ⬠㲀◁ö舄씄ֺࠊ䰐┸–䁀䢀肛脁菁±聵䄁ì섁持ũ䄀솁ā䝁ù脁龁ƴ䄁쒁상䌁䅁č脁ꒁEĀ餁K脁獁ǒ脁᳁ğ肝Ź섁䤁ųĀࣁ䄀薁Ġ脀鍁āĀ䪁Ŭ섁ꃁa섀佁Ǿ䄁㭀7©䄀鳁댁䄁}䄁굁Ǭ脀ぁĦ脀剁䄀❁Ŵ老欀沁{耀ꬁ䷁į䄀锁
Я еще не видел никакой последовательности, но на некоторых строках это работает как задумано. К несчастью, это наименее.