ProfiPHPProfiPHP
  1. Главная
  2. Веб сервер
  3. Модуль Mbstring для работы с многобайтными строками

Модуль 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 покажет правильное значение. Функция Strlen для строки 'Вася Пупкин' вернула 21 байт. Функция же Mb_strlen под­считала количество символов в строке с учетом того, что под разные символы от­водится разное количество байтов. В секции [mbstring] конфигурационного файла php.ini можно обнаружить директиву mbstring.func_overload, которая по умолчанию принимает значение 0. Если вы­ставить ее в значение 2, стандартные функции РНР будут заменяться их mbstring-aнaлoгaми. Переключив значение директивы и перезагрузив сервер, вы сможете убедиться в этом самостоятельно: функция Strlen из примеравернет пра­вильное значение в 11 символов. Но механизм перегрузки функций объявлен устаревшим и его использование крайне не рекомендовано.

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

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

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