Как вы превращаете строку в массив?По умолчанию PHP не является многобайтовым, поэтому он, вероятно, разбивает многобайтовые символы по середине.
Помните, что в UTF-8 символы имеют переменную длину.Некоторые символы - один байт, некоторые - два, три или четыре.(Я думаю, что на самом деле возможно до шести.) Вам понадобится очень умный алгоритм разделения строк, который бы знал, когда два или три байта были одним символом, и оставил бы их вместе.
При отсутствии такогоалгоритм, простейшее решение может быть преобразовать вашу строку в UTF-32.Теперь все символы имеют длину четыре байта, вы можете разделить их на каждые четыре байта (для упрощенных строковых функций PHP, что означает каждые четыре символа, потому что PHP думает, что байт является символом).
Объединение диакритических знаков может бытьпроблема, однако (два символа Unicode составляют один печатный символ).Но, по крайней мере, вы не получите Unicode.Вы можете получить КОМБИНИРУЮЩИЙ ДИАРЕЗИС сам по себе, но это не очень сломано.Я не уверен, насколько комбинирующие символы Unicode применяются к восточноазиатским языкам.Я не эксперт по Юникоду.