PHP и проблемы со строками в UTF-8

PHP и проблемы со строками в UTF-8

Почему крокозябры в UTF-8

Здравствуйте, уважаемые читатели!

Не секрет, что многие начинающие программисты сталкиваются с вопросом о работе в PHP со строками, закодированными в UTF-8. Сразу оговоримся, что наши добрые знакомые строковые функции substr() и strpos() с юникодом работают некорректно. Некоторые специалисты советуют придумывать разнообразные «обвязки» или устанавливать дополнительные библиотеки, исправляющие данный недостаток.

Однако, в PHP существует хороший и правильный способ «совладать» с UTF-8 — специальное расширение «mbstring». В случае, когда у Вас установлен PHP5, mbstring уже должен быть установлен с поддержкой мультибайтовых кодировок. Для проверки посмотрите настройки конфигурации: ./configure –enable-mbstring. В PHP4, возможно, придётся доустановить mbstring вручную, после чего в папке с расширениями должен появиться файл php_mbstring.so или php_mbstring.dll для linux и windows соответственно, но всё же проще, наверное, будет обновить версию языка.

Таким образом, отныне вы сможете использовать в полной мере всё многообразие функций mb_*, среди которых и mb_strpos(), mb_split() и прочие аналоги старых функций. При этом, стоит указать на одну распространённую ошибку – при использовании описанных функций кодировку обязательно необходимо указывать как последний аргумент.

И напоследок, пример того, как функция ucfirst() будет преобразовывать первый символ строки с помощью mbstring в верхний регистр:

function ucfirst_utf8($str) {
if (mb_check_encoding($str,'UTF-8')) {
$first = mb_substr(
mb_strtoupper($str, "utf-8"),0,1,'utf-8'
);
return $first.mb_substr(
mb_strtolower($str,"utf-8"),1,mb_strlen($str),'utf-8'
);
} else {
return $str;
}
}

Дискуссия по теме