Mbstring і PHP необхідно використовувати в розробці веб-додатків

0

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

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

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

Рядки — це просто набір символів. Зазвичай у PHP рядкові операції працюють із однобайтовими рядками. Наприклад: ви можете порівняти рядки «Привіт» і «Привіт». За допомогою strcmpr() два рядки порівнюватимуться, припускаючи, що кожен символ у рядку займає один байт.

Але подумайте про мову, яка містить більше 256 символів (наприклад, японську), або коли ми хочемо представити символи з кількох мов одночасно. Одного байта пам’яті для кожного символу недостатньо. Ось тут і з’являється багатобайтова концепція.

Рядок японського тексту може призвести до того, що функція strcmpr() повертає неправильне або сміттєве значення, оскільки припущення, що один байт представляє один символ, більше не відповідає дійсності. Коли ми працюємо з рядками з багатобайтним кодуванням, для роботи з цими рядками потрібні спеціальні функції, а не звичайні функції для однобайтових рядків. Для роботи з багатобайтовими рядками в PHP mbstring надає функції багатобайтових рядків.

Розуміння UTF-8

UTF розшифровується як Unicode Transformation Format і є системою кодування, яка має на меті представити кожен символ у кожній мові в одному наборі символів. Існують різні версії 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 кодує символи в кілька байтів за такою схемою:

Отже, як він дізнається, чи зберігається символ в одному байті чи в кількох байтах? Для цього він дивиться на старший біт першого байта.

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

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

Багатобайтові еквіваленти звичайних рядкових функцій

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

Таблиця 4: Однобайтові еквівалентні багатобайтові рядкові функції

Один байт Багатобайтовий опис
strlen() mb_strlen() Отримати довжину рядка
strpos() mb_strpos() Знайти позицію першого входження рядка в рядок
substr() mb_substr() Повернути частину рядка
strtolower() mb_strtolower() Зробіть рядок малими буквами
strtoupper() mb_strtoupper() Зробіть рядок верхнім регістром
substr_count() mb_substr_count() Підрахуйте кількість входжень підрядка
split() mb_split() Розбити рядок на масив за допомогою регулярного виразу
пошта() mb_send_mail() Надсилайте закодовану пошту
erg() mb_ereg() Збіг регулярного виразу
зробити() mb_regi() Збіг регулярного виразу без урахування регістру
Наведу приклад використання багатобайтової функції:
  • Назва функції: int mb_strlen (рядок $str [, рядок $encoding])

  • Опис: Отримати довжину рядка.

  • Параметри: str (вхідний рядок, довжину якого необхідно визначити)

    кодування (кодування символів)

  • Значення, що повертається: кількість символів у вхідному рядку str із кодуванням символів encoding

  • Тип повернення: int

Приклад коду: Ось приклад коду використання функції 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_вихід пропуск 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

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

«Змінна опція» визначає значення змінного режиму. Тут описано, як і звідки можна змінити параметри 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, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі