Mb get info: примеры (PHP)

Использование mb_get_info для работы с кодировками в PHP
Раздел: Многобайтовые строки
mb_get_info(string $type = "all"): array|string|int|false
Функция mb_get_info в PHP

Функция mb_get_info возвращает информацию о текущих настройках модуля многобайтовых строк (mbstring). Она применяется для отладки и проверки конфигурации, связанной с обработкой текста в различных кодировках, таких как UTF-8. Это позволяет убедиться в корректности настроек перед выполнением операций с многобайтовыми строками.

Аргументы функции

Функция принимает один необязательный параметр type.

  • type (string) – определяет тип возвращаемой информации. Если аргумент не указан, возвращается массив всех доступных настроек. Возможные значения:
    • "internal_encoding" – внутренняя кодировка скрипта.
    • "http_input" – кодировка HTTP-ввода.
    • "http_output" – кодировка HTTP-вывода.
    • "http_output_conv_mimetypes" – MIME-типы для преобразования HTTP-вывода.
    • "mail_charset" – кодировка для функций почты.
    • "mail_header_encoding" – кодировка заголовков почты.
    • "mail_body_encoding" – кодировка тела почты.
    • "illegal_chars" – недопустимые символы.
    • "encoding_translation" – включено ли преобразование кодировки.
    • "language" – язык модуля mbstring.
    • "detect_order" – порядок определения кодировки.
    • "substitute_character" – символ подстановки.
    • "strict_detection" – строгое определение кодировки.
    • "all" – возврат всех настроек в виде массива (значение по умолчанию).
Примеры использования mb_get_info

Пример получения всех настроек модуля mbstring.

<?php
print_r(mb_get_info());
?>
Array
(
    [internal_encoding] => UTF-8
    [http_input] => pass
    [http_output] => pass
    [http_output_conv_mimetypes] => ^(text/|application/xhtml\+xml)
    [mail_charset] => UTF-8
    [mail_header_encoding] => BASE64
    [mail_body_encoding] => BASE64
    [illegal_chars] => 0
    [encoding_translation] => Off
    [language] => neutral
    [detect_order] => Array
        (
            [0] => ASCII
            [1] => UTF-8
        )
    [substitute_character] => 0
    [strict_detection] => Off
)

Пример получения конкретной настройки, например, внутренней кодировки.

<?php
echo mb_get_info('internal_encoding');
?>
UTF-8

Пример проверки порядка определения кодировки.

<?php
print_r(mb_get_info('detect_order'));
?>
Array
(
    [0] => ASCII
    [1] => UTF-8
)
Похожие функции в PHP

В PHP существуют другие функции для работы с настройками многобайтовых строк.

  • mb_internal_encoding() – получает или устанавливает внутреннюю кодировку скрипта. Предпочтительнее для установки кодировки.
  • mb_http_input() – определяет кодировку HTTP-ввода. Используется для проверки кодировки входящих данных.
  • mb_http_output() – получает или устанавливает кодировку HTTP-вывода. Применяется для управления выводом.
  • mb_detect_order() – устанавливает или получает порядок определения кодировки. Удобна для настройки детектирования.

Функция mb_get_info предоставляет более общую информацию, в то время как другие функции сфокусированы на конкретных аспектах.

Типичные ошибки

Ошибки часто возникают из-за неверного использования параметров функции.

Пример передачи несуществующего ключа.

<?php
var_dump(mb_get_info('unknown_key'));
?>
bool(false)

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

<?php
// Неправильно: функция не устанавливает настройки
$info = mb_get_info('internal_encoding');
$info = 'ISO-8859-1'; // Это не изменит реальную настройку
echo mb_internal_encoding(); // Осталось прежнее значение
?>
UTF-8
Изменения в PHP

В PHP 8 функция mb_get_info не претерпела значительных изменений. Однако в ранних версиях, таких как PHP 7, могли добавляться новые ключи для параметра type. В PHP 8.1 были улучшения модуля mbstring, но сама функция осталась стабильной. Рекомендуется проверять документацию для конкретных версий.

Расширенные примеры

Пример использования mb_get_info для отладки настроек перед обработкой строк.

Пример php
<?php
// Проверка настроек перед операцией
$info = mb_get_info();
if ($info['internal_encoding'] !== 'UTF-8') {
    mb_internal_encoding('UTF-8');
    echo 'Кодировка изменена на UTF-8';
} else {
    echo 'Кодировка уже UTF-8';
}
?>
Кодировка уже UTF-8

Пример получения информации о подстановочном символе.

Пример php
<?php
$substitute = mb_get_info('substitute_character');
echo 'Текущий символ подстановки: ' . $substitute;
?>
Текущий символ подстановки: 0

Пример анализа порядка определения кодировки для использования в mb_detect_encoding.

Пример php
<?php
$order = mb_get_info('detect_order');
$text = 'Пример текста';
$encoding = mb_detect_encoding($text, $order);
echo 'Определенная кодировка: ' . $encoding;
?>
Определенная кодировка: UTF-8

Пример проверки, включено ли преобразование кодировки.

Пример php
<?php
$translation = mb_get_info('encoding_translation');
echo 'Преобразование кодировки: ' . $translation;
?>
Преобразование кодировки: Off
Альтернативы в других языках

В других языках программирования также есть инструменты для получения информации о кодировках.

Mb get info в Python

В Python модуль sys или locale позволяет получать данные о кодировках.

import sys
print(sys.getdefaultencoding())
utf-8

Mb get info в Javascript

В JavaScript информация о кодировках обычно связана с текстовыми декодерами/кодерами, но нет прямой аналогии.

console.log('Пример: декодер текста');
const decoder = new TextDecoder('utf-8');
console.log(decoder.encoding);
utf-8

Mb get info в MySQL

В MySQL можно проверить кодировки через системные переменные.

SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
+--------------------------+----------------------------+

PHP mb_get_info function comments

En
Mb get info Get internal settings of mbstring