Не очень давно столкнулся вот с чем.
Давным-давно, когда еще было модно использовать кодировку Windows-1251, я сделал пару сайтов на PHP. И вот, настало время перевести их на кодировку UTF-8.
Разобрался быстро с файлами, базой и шаблонами, все вроде бы зашуршало, но! Сразу не обратил внимание, но во многих местах, где использовалась функция PHP Substr (например, когда надо было преобразовать Имя Отчество Фамилия к виду И.О. Фамилия), ничего не происходило. Работа не выполнялась.
Скажем так, я потратил не 5 минут на поиски ответа, но все же нашел.
Функция Substr не умеет нормально работать с кириллицей в кодировке UTF-8. Для правильной работы все числовые аргументы нужно умножать на 2.
То есть, раньше было так:
substr("абвгд", 0, 2); // результат: аб
Если же вы используете кодировку UTF-8 и любое выражение в кириллице, надо сделать так:
substr("абвгд", 0, 4); // результат: аб
Если же не менять число в третьем аргументе, выведет только один знак.
Соответственно, чтобы получить "вгд", надо вызвать функцию так:
substr("абвгд", 4, 6); // результат: вгд
Интересно, не так ли?