PHP: Проблемы с поиском наиболее часто встречающегося символа в строке UTF-8 (например, 唐 犬 土 用 家犬 尨 犬 山 桑)? - PullRequest
1 голос
/ 22 октября 2010

Из базы данных MySQL я могу извлечь следующие символы utf-8:

"唐犬土用家犬尨犬山桑山犬巴戦師子幻日幻月引綱忠犬愛犬戌年成犬教条教義"

Я пытаюсь найти наиболее часто встречающийся символ в этой строке. Я попытался поместить каждый элемент в массив $ arr и сделать array_count_values ​​($ arr); К сожалению, операции с массивами (или print_r виновник?) Приводят к неправильному кодированию: [0] => � [1] => � [2] => � [3] => � Я могу нормально отображать символы в других ситуациях (т.е. извлечение из MySQL и отображение символов в php работает нормально!), Но функции массива (или вывод массива), похоже, запутывают.

Я ИЗМЕНИЛ /etc/php5/apache2/php.ini
и положил туда default_charset = "utf-8".

(А у меня SET NAMES ... и т. Д.)

А) Где проблема? Б) Могу ли я выполнить эту работу, не прибегая к массивам вообще (т.е. просто используя строковую функцию)?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 23 октября 2010

Как вы превращаете строку в массив?По умолчанию PHP не является многобайтовым, поэтому он, вероятно, разбивает многобайтовые символы по середине.

Помните, что в UTF-8 символы имеют переменную длину.Некоторые символы - один байт, некоторые - два, три или четыре.(Я думаю, что на самом деле возможно до шести.) Вам понадобится очень умный алгоритм разделения строк, который бы знал, когда два или три байта были одним символом, и оставил бы их вместе.

При отсутствии такогоалгоритм, простейшее решение может быть преобразовать вашу строку в UTF-32.Теперь все символы имеют длину четыре байта, вы можете разделить их на каждые четыре байта (для упрощенных строковых функций PHP, что означает каждые четыре символа, потому что PHP думает, что байт является символом).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...