PHP и строки в UTF8

Аватара пользователя
Distructor
Администратор
Сообщения: 1599
Зарегистрирован: 28 дек 2009
Судя по количеству жалоб на форумах в эпоху победного шествия Юникода по планете многих начинающих php-программистов интересуют вопросы как работать в php со строками в кодировке utf8. Что ж, добавлю и я в эту тему свои пять копеек…

Итак, в сегодняшней статье вы прочитаете как правильно работать со строками utf8 не перекодируя их в другие кодировки и не устанавливая никаких дополнительных php-библиотек или фреймворков.

Скажу сразу - старые хорошо известные строковые функции, такие как substr(), strpos() с UTF8 РАБОТАЮТ НЕКОРРЕКТНО (т.к. в UTF8 русские буквы кодируются двумя байтами). Поэтому проигнорируем советы “специалистов”, которые советуют изобретать разные обвязки для этих функций или устанавливать дополнительные библиотеки, которые “исправляют” этот недостаток. В PHP существует более правильный способ работы с юникодом - использование специального расширения - mbstring.

Сразу проверим что расширение mbstring установлено на веб-сервере. Если у вас PHP5, то скорее всего он уже был собран с поддержкой мультибайтовых кодировок (./configure –enable-mbstring) и вам ничего делать не прийдется.

В PHP4 при установленном расширении у вас в папке с расширениями php должен быть файл php_mbstring.so (для линукса) или php_mbstring.dll (для windows) и в файле настроек php.ini должна присутствовать раскомментированная строчка extensions=php_mbstring.so (или extensions=php_mbstring.dll для Windows). Если расширение не установлено - доустановите его или просто обновите вашу версию языка.

Теперь вам доступно все многообразие функций mb_* (полный список функций можно посмотреть по этой ссылке (внешка). Среди них вы найдете mb_strpos(), mb_substr(), mb_split() и многие другие аналоги старых функций. От старых они отличаются в основном только тем что КОРРЕКТНО работают с UTF8.

И одно важное замечание. При использовании любой из функций семейства mb_*() указывать кодировку последним аргументов ОБЯЗАТЕЛЬНО. 80% новичков, которые жалуются на форумах что функции mb_() работают неправильно в действительности наступают на эти грабли.

Источник: http://webdev.ks.ua/2009-02/php-strings-utf8.html

Вернуться в «PHP»