Mb encoding aliases: примеры (PHP)
mb_encoding_aliases(string $encoding): arrayОсновные сведения о функции mb_encoding_aliases
Функция mb_encoding_aliases возвращает массив, содержащий псевдонимы для указанной кодировки символов. Эта функция является частью модуля mbstring (Multibyte String), который предоставляет поддержку многобайтовых кодировок, таких как UTF-8, EUC-JP и другие.
Использование функции актуально при обработке текстовых данных в различных кодировках, особенно при необходимости нормализации названий кодировок, проверки поддержки определенной кодировки или построения гибких систем конвертации. Функция помогает определить, какие альтернативные имена могут использоваться для обращения к одной и той же кодировке в различных системах и библиотеках.
Функция принимает один обязательный параметр:
- encoding (string) – название кодировки, для которой необходимо получить список псевдонимов.
Функция возвращает массив (array) псевдонимов или false в случае, если указанная кодировка не найдена или не поддерживается.
Простые примеры использования
Пример для кодировки UTF-8:
<?php
$aliases = mb_encoding_aliases('UTF-8');
print_r($aliases);
?>Array
(
[0] => utf8
[1] => utf-8
)<?php
$encoding = 'CP936';
if ($aliases = mb_encoding_aliases($encoding)) {
echo "Кодировка $encoding поддерживается. Псевдонимы: " . implode(', ', $aliases);
} else {
echo "Кодировка $encoding не найдена.";
}
?>Кодировка CP936 поддерживается. Псевдонимы: ms936, windows-936
<?php
$result = mb_encoding_aliases('UNKNOWN_ENCODING');
var_dump($result);
?>bool(false)
Похожие функции в PHP
Прямых аналогов mb_encoding_aliases в стандартной библиотеке PHP нет, но существуют функции для работы с кодировками:
- mb_list_encodings – возвращает массив всех поддерживаемых кодировок. Используется для получения списка доступных кодировок, но без информации об их псевдонимах.
- iconv – модуль для конвертации строк между различными кодировками. Предоставляет функцию
iconv_get_encoding, но она не возвращает псевдонимы. - mb_check_encoding – проверяет, является ли строка корректной для указанной кодировки.
Функция mb_encoding_aliases уникальна именно для получения альтернативных имен кодировок в рамках модуля mbstring.
Типичные ошибки при использовании
<?php
// Ожидается строка, передается массив
$aliases = mb_encoding_aliases(['UTF-8']);
?>Warning: mb_encoding_aliases() expects parameter 1 to be string, array given
Названия кодировок чувствительны к регистру. Например, 'utf-8' и 'UTF-8' могут восприниматься по-разному:
<?php
$aliases1 = mb_encoding_aliases('utf-8');
$aliases2 = mb_encoding_aliases('UTF-8');
var_dump($aliases1, $aliases2);
?>bool(false)
array(2) {
[0]=>
string(4) "utf8"
[1]=>
string(5) "utf-8"
}<?php
$aliases = mb_encoding_aliases('UnknownEncoding');
// Ошибка, если попытаться использовать false как массив
foreach ($aliases as $alias) {
echo $alias;
}
?>Warning: foreach() argument must be of type array|object, bool given
Изменения в последних версиях PHP
В PHP 8.0 функция не претерпела значительных изменений в поведении. Однако, начиная с PHP 8.0, многие функции mbstring стали более строгими к типам передаваемых аргументов. В более ранних версиях, например PHP 7.x, функция могла вести себя менее предсказуемо при передаче неверных аргументов.
В PHP 8.1 и 8.2 не было зафиксировано изменений, специфичных для mb_encoding_aliases. Актуальную информацию всегда рекомендуется проверять в официальной документации.
Расширенные примеры применения
<?php
$allEncodings = mb_list_encodings();
$encodingMap = [];
foreach ($allEncodings as $encoding) {
$aliases = mb_encoding_aliases($encoding);
if ($aliases !== false) {
$encodingMap[$encoding] = $aliases;
}
}
print_r($encodingMap);
?>Array
(
[UTF-8] => Array
(
[0] => utf8
[1] => utf-8
)
[CP936] => Array
(
[0] => ms936
[1] => windows-936
)
...
)<?php
function normalizeEncodingName(string $input): string|false {
$encodings = mb_list_encodings();
// Прямое совпадение
if (in_array($input, $encodings, true)) {
return $input;
}
// Поиск через псевдонимы
foreach ($encodings as $encoding) {
$aliases = mb_encoding_aliases($encoding);
if ($aliases !== false && in_array($input, $aliases, true)) {
return $encoding;
}
}
return false;
}
// Пример использования
$normalized = normalizeEncodingName('utf8');
echo $normalized; // Выведет UTF-8
?>UTF-8
<?php
function isEncodingSupported(string $userEncoding): bool {
// Проверка прямого совпадения
if (in_array($userEncoding, mb_list_encodings(), true)) {
return true;
}
// Проверка среди всех псевдонимов
foreach (mb_list_encodings() as $encoding) {
$aliases = mb_encoding_aliases($encoding);
if ($aliases !== false && in_array($userEncoding, $aliases, true)) {
return true;
}
}
return false;
}
// Примеры
var_dump(isEncodingSupported('UTF-8')); // true
var_dump(isEncodingSupported('utf8')); // true
var_dump(isEncodingSupported('Unknown')); // false
?>bool(true) bool(true) bool(false)
<?php
function safeConvertEncoding(string $str, string $toEncoding, string $fromEncoding): string|false {
// Нормализация названий кодировок
$normalizedTo = normalizeEncodingName($toEncoding);
$normalizedFrom = normalizeEncodingName($fromEncoding);
if ($normalizedTo === false || $normalizedFrom === false) {
return false;
}
return mb_convert_encoding($str, $normalizedTo, $normalizedFrom);
}
// Пример конвертации с использованием псевдонима
$result = safeConvertEncoding('Пример', 'utf8', 'cp1251');
echo $result;
?>Пример
Аналоги в других языках программирования
Mb encoding aliases в Python
В Python для получения информации о кодировках используется модуль codecs. Прямого аналога нет, но можно получить список доступных кодировок:
import codecs
import pprint
# Получение списка всех доступных кодировок
all_encodings = codecs.alias_registry.get_aliases()
# Фильтрация для определенной кодировки (например, utf-8)
aliases = [alias for alias, enc in all_encodings.items() if enc == 'utf_8']
pprint.pprint(aliases)['utf-8', 'utf8', 'U8', 'UTF', 'utf8', 'cp65001']
В Node.js для работы с кодировками используется модуль buffer и iconv-lite. Прямого аналога функции получения псевдонимов нет. Поддерживаемые кодировки обычно жестко заданы.
Mb encoding aliases в MySQL
В MySQL информация о доступных кодировках хранится в таблице INFORMATION_SCHEMA.CHARACTER_SETS. Запрос для получения данных:
SELECT CHARACTER_SET_NAME, DESCRIPTION
FROM INFORMATION_SCHEMA.CHARACTER_SETS
WHERE CHARACTER_SET_NAME LIKE '%utf%';Это возвращает список кодировок, но не их псевдонимы.