Mb internal encoding: примеры (PHP)
mb_internal_encoding(?string $encoding = null): string|boolФункция mb_internal_encoding в PHP
Функция mb_internal_encoding() является частью расширения mbstring и отвечает за установку или получение внутренней кодировки символов для скрипта.
Функция применяется для корректной обработки многобайтовых строк, например, текстов на китайском, японском, арабском или русском языках. Установка внутренней кодировки влияет на поведение других функций из расширения mbstring.
- encoding (необязательный): Строка, определяющая кодировку для установки. Если параметр опущен, функция возвращает текущую внутреннюю кодировку.
- Возвращает: При успешной установке кодировки –
true, при неудаче –false. Если параметр не указан, возвращает имя текущей внутренней кодировки в виде строки илиfalseпри ошибке.
Примеры использования mb_internal_encoding
<?php
echo mb_internal_encoding(); // Выведет, например, 'UTF-8'
?>UTF-8
<?php
$result = mb_internal_encoding('UTF-8');
var_dump($result); // Успешная установка
echo mb_internal_encoding(); // Проверка
?>bool(true) UTF-8
<?php
$result = mb_internal_encoding('UNKNOWN-ENCODING');
var_dump($result);
?>bool(false)
Похожие функции в PHP
- mb_regex_encoding() – Устанавливает или получает кодировку для регулярных выражений mbstring. Работает отдельно от внутренней кодировки.
- mb_http_output() – Устанавливает или получает кодировку вывода HTTP. Контролирует преобразование символов перед отправкой в браузер.
- iconv_set_encoding() – Устанавливает кодировку для расширения iconv. Альтернатива mbstring для преобразования кодировок.
- ini_set('default_charset', ...) – Установка кодировки по умолчанию через конфигурацию PHP. Влияет на заголовки Content-Type.
Функцию mb_internal_encoding предпочтительнее использовать для согласования кодировок всех операций со строками внутри скрипта при работе с многобайтовыми функциями mbstring. Другие функции предназначены для специфических контекстов (вывод, регулярные выражения).
Типичные ошибки
<?php
if (!mb_internal_encoding('WINDOWS-1251')) {
echo 'Не удалось установить кодировку. Возможно, она не поддерживается.';
}
?>Не удалось установить кодировку. Возможно, она не поддерживается.
Ошибки появляются, если внутренняя кодировка не совпадает с реальной кодировкой обрабатываемых строк.
<?php
// Файл сохранен в CP1251, но внутренняя кодировка UTF-8
mb_internal_encoding('UTF-8');
$str = file_get_contents('file_cp1251.txt'); // Строка в CP1251
$length = mb_strlen($str); // Неверная длина символов
?>// Результат может быть непредсказуемым, например, длина строки окажется больше реального количества символов.
Изменения в последних версиях PHP
- В PHP 8.0 параметр
encodingстал необязательным. Ранее он был обязательным для режима установки. - В PHP 7.0 функция перестала быть чувствительной к регистру в названиях кодировок. Имена кодировок рекомендуется указывать в верхнем регистре.
- Начиная с PHP 5.6, кодировка по умолчанию изменена с
ISO-8859-1наUTF-8в php.ini (default_charset).
Расширенные примеры использования
<?php
// Попытка установить UTF-8, иначе CP1251
$preferredEncoding = 'UTF-8';
$fallbackEncoding = 'CP1251';
if (!mb_internal_encoding($preferredEncoding)) {
mb_internal_encoding($fallbackEncoding);
}
echo 'Текущая кодировка: ' . mb_internal_encoding();
?>Текущая кодировка: UTF-8 (или CP1251, если UTF-8 не поддерживается)
<?php
mb_internal_encoding('UTF-8');
$str = 'Привет, мир!';
echo 'Длина строки: ' . mb_strlen($str) . ' символов.\n';
echo 'Подстрока: ' . mb_substr($str, 8, 3); // 'мир'
?>Длина строки: 12 символов. Подстрока: мир
<?php
$currentEncoding = mb_internal_encoding(); // Сохраняем текущую
// Обработка строки в другой кодировке
mb_internal_encoding('CP1251');
$strCp1251 = mb_strtoupper('пример');
// Возвращаем исходную кодировку
mb_internal_encoding($currentEncoding);
echo 'Результат в CP1251: ' . $strCp1251 . '\n';
echo 'Возвращенная кодировка: ' . mb_internal_encoding();
?>Результат в CP1251: ПРИМЕР Возвращенная кодировка: UTF-8 (или что было изначально)
<?php
$encoding = 'UTF-8';
if (in_array($encoding, mb_list_encodings())) {
mb_internal_encoding($encoding);
echo "Кодировка $encoding установлена.";
} else {
echo "Кодировка $encoding не поддерживается.";
}
?>Кодировка UTF-8 установлена.
Аналоги в других языках программирования
Python 3 использует строки Unicode по умолчанию. Понятие "внутренней кодировки" явно не задается. Для работы с байтами используется кодировка/декодировка.
# Кодировка задается при преобразовании строки в байты и обратно.
text = 'Пример'
encoded = text.encode('utf-8') # b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80'
decoded = encoded.decode('utf-8') # 'Пример'b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80' Пример
В JavaScript строки представляют собой последовательности кодовых точек UTF-16. Явной установки внутренней кодировки не существует.
Кодировка устанавливается на уровне соединения, базы данных, таблицы или столбца.
-- Установка кодировки соединения
SET NAMES 'utf8mb4';