Mbstring и PHP должны использоваться в разработке веб-приложений

3

Байты и биты — это две единицы хранения логической информации. Бит можно рассматривать как одно отверстие, которое может быть заполнено одним из двух значений: 0 или 1.

Байт представляет собой группу из восьми битов. С точки зрения математики, байт может представлять 256 различных значений (28).

Давайте подумаем о языке, скажем, об английском. В нем есть некоторые символы (a, b, c, … и т. д.), которые представлены в компьютере байтами. Общее количество символов в английском языке не превышает 256, поэтому каждый символ может быть представлен с использованием другой 8-битной последовательности.

Строки — это просто набор символов. Обычно строковые операции PHP работают со строками однобайтовых символов. Например: вы можете сравнить строки «Привет» и «Привет». С помощью strcmpr() две строки будут сравниваться, предполагая, что каждый символ в строке занимает один байт.

Но подумайте о языке, который имеет более 256 символов (например, японский), или когда мы хотим представить символы из нескольких языков одновременно. Хранилища одного байта для каждого символа недостаточно. Вот тут-то и появляется концепция многобайтности.

Строка текста на японском языке может привести к тому, что функция strcmpr() вернет неверное или ошибочное значение, поскольку предположение о том, что один байт представляет один символ, больше не соответствует действительности. Когда мы работаем с многобайтовыми кодированными строками, для манипулирования этими строками требуются специальные функции, а не обычные однобайтовые строковые функции. Чтобы иметь дело с многобайтовыми строками в PHP, mbstring предоставляет специальные многобайтовые строковые функции.

Понимание UTF-8

UTF означает формат преобразования Unicode и представляет собой систему кодирования, целью которой является представление каждого символа на каждом языке в одном наборе символов. Существуют разные версии UTF, некоторые из которых показаны ниже:

Формат кодирования Описание
UTF-1 Совместим с ISO-2022, устаревшим стандартом Unicode.
UTF-7 7-битная система кодирования в основном использовалась в электронной почте, но не являлась частью стандарта Unicode.
UTF-8 8-битная система кодирования, переменная ширина и совместимость с ASCII.
UTF-EBCDIC 8-битная система кодирования, переменная ширина и совместимость с EBCDIC.
UTF-16 16-битная система кодирования, переменная ширина.
UTF-32 32-битная система кодирования, фиксированная ширина.

Мы обнаруживаем, что большую часть времени используем UTF-8 при работе с многобайтовым текстом, поэтому давайте на мгновение сосредоточимся на этом. UTF-8 кодирует символы в несколько байтов по следующей схеме:

Итак, как он узнает, хранится ли символ в одном байте или в нескольких байтах? Для этого он смотрит на старший бит первого байта.

Код Значение
0ххххххх Однобайтовый код
110ххххх За этим байтом следует еще один байт
1110хххх За этим байтом следует еще два байта
11110xxx За этим байтом следует еще три байта
111110xx За этим байтом следует еще четыре байта
1111110x За этим байтом следует еще пять байтов
10хххххх Продолжение многобайтового символа

Затем каждый непрерывный байт в многобайтовой последовательности начинается с 1 и 0 в двух самых старших битах, чтобы обеспечить способ обнаружения поврежденных данных.

Многобайтовые эквиваленты общих строковых функций

Для часто используемых строковых функций, таких как strlen(), strops() и substr(), существуют многобайтовые эквивалентные функции. Вы должны использовать эквивалентные функции при работе с многобайтовыми строками.

Таблица 4: Однобайтовые эквивалентные многобайтовые строковые функции

Один байт Мультибайт Описание
стрлен() mb_strlen() Получить длину строки
стрпос() mb_strpos() Найти позицию первого вхождения строки в строку
substr() mb_substr() Возврат части строки
strtolower() mb_strtolower() Сделать строку строчной
strtoupper() mb_strtoupper() Сделать строку прописной
substr_count() mb_substr_count() Подсчитать количество вхождений подстроки
расколоть() mb_split() Разделить строку на массив с помощью регулярного выражения
почта() mb_send_mail() Отправить зашифрованное письмо
эрг() mb_ereg() Соответствие регулярному выражению
делать() mb_regi() Соответствие регулярному выражению без учета регистра
Приведу пример использования многобайтовой функции:
  • Имя функции: int mb_strlen (строка $str [, строка $encoding])

  • Описание: Получить длину строки.

  • Параметры: str (входная строка, длина которой должна быть определена)

    кодировка (кодировка символов)

  • Возвращаемое значение: Количество символов входной строки str с кодировкой кодировки символов.

  • Тип возвращаемого значения: целое

Пример кода: Вот пример кода использования функции mb_strlen. Здесь входная строка представляет собой китайское слово, и используются три различных варианта кодировки символов.

$ str ="大大";
echo mb_strlen ($ str, 'utf8' ).
echo mb_strlen ($ str, 'gbk' ).
echo mb_strlen ($ str, ' gb2312').

Ограничения: UTF-8 имеет некоторые ограничения, например:

  • Теоретически максимальная длина символов в кодировке UTF-8 составляет шесть байтов.
  • 0xFE и 0xFF никогда не используются в этой кодировке.

Включить mbstring из php.ini :

  • Подтвердите наличие php_mbstring.dll в папке ext.
  • Раскомментируйте ;extension=php_mbstring.dll из php.ini (т.е. extension=php_mbstring.dll)
  • Перезапустите сервер.

Конфигурация времени выполнения: чтобы включить некоторые функции mbstring, необходимо изменить еще некоторые настройки.

Таблица 5: Конфигурации в php.ini

Имя Значение по умолчанию Изменяемая опция
mbstring.language нейтральный PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.detect_order НУЛЕВОЙ PHP_INI_ALL
mbstring.http_input проходить PHP_INI_ALL
mbstring.http_output проходить PHP_INI_ALL
mbstring.internal_encoding НУЛЕВОЙ PHP_INI_ALL
mbstring.script_encoding НУЛЕВОЙ PHP_INI_ALL
mbstring.substitute_character НУЛЕВОЙ PHP_INI_ALL
mbstring.func_overload 0 PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.encoding_translation 0 PHP_INI_SYSTEM | PHP_INI_PERDIR

Пояснение к параметрам конфигурации:

Параметр «Changeable option» определяет изменяемое значение режима. Он описывает, как и откуда можно изменить параметры mbstring. Вот смысл значений режима:

Таблица 6: Различные режимы изменения

Режим Значение
PHP_INI_SYSTEM Мы можем установить запись, используя php.ini или httpd.conf
PHP_INI_PERDIR Мы можем установить запись, используя php.ini, .htaccess, httpd.conf или .user.ini.
PHP_INI_ALL Мы можем установить запись из любого места
PHP_INI_USER Мы можем установить запись с помощью пользовательского скрипта.

Как перейти из пользовательского скрипта:

Мы можем использовать следующий код для установки внутренней кодировки mbstring из пользовательского скрипта:

<?php
ini_set('mbstring.internal_encoding', 'UTF-8');
?>

Как перейти с php.ini:

Мы можем отредактировать файл php.ini, чтобы установить некоторые параметры mbstring.

; Set default language
mbstring.language = Neutral; Set default language to Neutral(UTF-8) (default)
mbstring.language = English; Set default language to English
 
; Enabled HTTP input encoding translation.
mbstring.encoding_translation = On
 
 
; Set default HTTP input character encoding
 
mbstring.http_input = pass ; No conversion.
mbstring.http_input = auto ; Set HTTP input to auto
Некоторые проблемы, связанные с mbstring:

Использование функций mbstring иногда может вызвать у вас некоторое беспокойство. Здесь я расскажу о некоторых проблемах использования многобайтовой перегрузки функций. Давайте придумаем сценарий.

Вы включили опцию mbstring.func_overload в файле php.ini. Ваша работа идет нормально. Вы перегружаете однобайтовую строковую функцию многобайтовыми строковыми функциями. Но что произойдет, если вам понадобится внешняя библиотека, которая часто использует какую-то строковую функцию?

Есть решение этой проблемы. Вы можете использовать mbstring.internal_coding. Когда вы вызываете некоторую внешнюю библиотеку, она будет использовать однобайтовую кодировку, а когда вы вернетесь к вашему проекту, будет реализована многобайтовая кодировка. Но что произойдет, если между вашим проектом и внешней библиотекой есть обратный вызов? Это терпит неудачу здесь.

Таким образом, вы должны помнить об этих проблемах при использовании параметров mbstring.

Важность mbstring для веб-разработки:

Для разработки любого международного веб-приложения использование mbstring является обязательным. В противном случае ваше приложение будет ограничено некоторыми нациями и языками. Как разработчик, я предлагаю вам получить некоторые знания в этой области и стать эффективным веб-программистом.

Источник записи: instantshift.com

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