Строка в PHP реализована в виде массива байт и целого числа, содержащего длину буфера. В определении кроется подводный камень, на который натыкаются многие начинающие программисты.
Кодировка UTF-8 в каждом символе имеет 2 байта, в то время как Windows 1251 которая к сожалению всё ещё пользуются популярностью каждый символ равен 1 байту. По этому return strlen(‘A’); в кодировке UTF-8 вернет 2, хотя на поверку длинна 1 символ. Для того, чтобы избежать подобной проблемы, надо явно указать с какой кодировкой идет работа return mb_strlen(‘A’, ‘UTF-8’);.
Для того, чтобы ограничить длину кириллической строки, используется функция mb_substr() или substr()если речь идет только о латинице и числах. Функция mb_substr(string $str , int $start [, int $length [, string $encoding ]]) — если работа идет со строками в конкретно указанной кодировке.
echo mb_substr('абвгедж', 1, ‘UTF-8’); // выведет на страницу бвгедж
echo mb_substr('абвгедж', 1, 3, ‘UTF-8’); // выведет на страницу бвг
echo mb_substr('абвгедж', 0, 4, ‘UTF-8’); // выведет на страницу абвг
echo mb_substr('абвгедж', 0, 8, ‘UTF-8’); // выведет на страницу абвгедж
echo mb_substr('абвгедж', -1, 1, ‘UTF-8’); // выведет на страницу ж
Данным способом можно легко ограничить длину строки, главное помните о том, в какой кодировке работаете, чтобы потом не искать ошибки в уже работающих приложениях.
Добавить комментарий