ProfiPHPProfiPHP
Категория: Веб сервер

Модуль Mbstring для работы с многобайтными строками

В языке программирования существует понятие символа. Каждый символ состоит из определенного количества байтов, которое в точности его описывает. В большинства языков все необходимые символы можно закодировать одним восьмибитным значением, но существуют также и языки, требующие столько символов, что они не умещаются в один байт.
Примечание: Байт состоит из восьми бит, который может содержать одно из двух различных значений, единицу или ноль. Один байт может задавать только 256 уникальных значений.

Многобайтные строки, для которых используют специально разработанные схемы кодирования, могут содержать более, чем 256 символов. При этом функции для их обработки продолжают работать со строками, как будто они закодированы в обычной побайтовой системе.

Большинство функций 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 покажет правильное значение.

Будьте внимательны с кодировками, поскольку данные ошибки очень сложно найти. Поэтому, рекомендуется всегда жестко указывать необходимую кодировку и использовать подходящие функции.

Добавить комментарий

Имя:
Текст комментария: