В языке программирования существует понятие символа. Каждый символ состоит из определенного количества байтов, которое в точности его описывает. В большинства языков все необходимые символы можно закодировать одним восьмибитным значением, но существуют также и языки, требующие столько символов, что они не умещаются в один байт.
Большинство функций PHP не умеют работать с многобайтными строками. При этом они будут возвращать совсем неправильный результат. Для правильной обработки данных строк, необходимо использовать специальные функции, так как в таких кодировках два или более последовательных байта могут задавать один символ.Модуль Mbstring предоставляет функции для работы с многобайтными строками и занимается конвертированием строк из одной кодировки в другую. Также предназначен для работы с Unicode-кодировками, такими, как UTF-8 и UCS-2.
Модуль Mbstring не входит в список расширений, устанавливаемых по умолчанию. Для включения достаточно добавить в файле Php.ini следующую строку:
extension=php_mbstring.dll
Большинство стандартных функций имеют аналоги для работы с многобайтными строками и отличаются только префиксом “mb_” и некоторыми параметрами кодировки.
Также необходимо четко задавать Mb_internal_encoding, которая устанавливает внутреннюю кодировку скрипта. В качестве параметра указывается кодировка, в которую будут преобразовываться входные данные HTTP запроса, из которой будет конвертироваться HTTP вывод, а также это кодировка по умолчанию для всех функций работающих со строками, определенными в модуле Mbstring:
mb_internal_encoding( 'UTF-8' );
Например, для функции Strlen аналогом служит функция Mb_strlen. Точно также и для других функций.
Приведем пример, который покажет различие в данных функциях:
echo strlen( 'Вася Пупкин' ); // 21 echo mb_strlen( 'Вася Пупкин' ); // 11
Как видно из примера, функция Mb_strlen покажет правильное значение.
Будьте внимательны с кодировками, поскольку данные ошибки очень сложно найти. Поэтому, рекомендуется всегда жестко указывать необходимую кодировку и использовать подходящие функции.