622 подписчика

PHP, Substr, UTF-8 и кириллица

170 прочитали
Не очень давно столкнулся вот с чем. Давным-давно, когда еще было модно использовать кодировку Windows-1251, я сделал пару сайтов на PHP. И вот, настало время перевести их на кодировку UTF-8.

Не очень давно столкнулся вот с чем.

Давным-давно, когда еще было модно использовать кодировку Windows-1251, я сделал пару сайтов на PHP. И вот, настало время перевести их на кодировку UTF-8.

Разобрался быстро с файлами, базой и шаблонами, все вроде бы зашуршало, но! Сразу не обратил внимание, но во многих местах, где использовалась функция PHP Substr (например, когда надо было преобразовать Имя Отчество Фамилия к виду И.О. Фамилия), ничего не происходило. Работа не выполнялась.

Скажем так, я потратил не 5 минут на поиски ответа, но все же нашел.

Функция Substr не умеет нормально работать с кириллицей в кодировке UTF-8. Для правильной работы все числовые аргументы нужно умножать на 2.

То есть, раньше было так:
substr("абвгд", 0, 2); // результат: аб

Если же вы используете кодировку UTF-8 и любое выражение в кириллице, надо сделать так:
substr("абвгд", 0, 4); // результат: аб

Если же не менять число в третьем аргументе, выведет только один знак.

Соответственно, чтобы получить "вгд", надо вызвать функцию так:
substr("абвгд", 4, 6); // результат: вгд

Интересно, не так ли?