(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_detect_encoding — Определение кодировки символов
$string
, array|string|null $encodings
= null
, bool $strict
= false
): string|false
Определяет наиболее вероятную кодировку символов для строки (string) string
из
упорядоченного списка кандидатов.
Автоматическое определение предполагаемой кодировки символов не может быть полностью надёжным; без дополнительной информации это похоже на расшифровку зашифрованной строки без ключа. Всегда предпочтительно использовать индикацию кодировки символов, хранящуюся или передаваемую с данными, такую как HTTP-заголовок "Content-Type".
Функция наиболее полезна с многобайтовыми кодировками, когда не все последовательности байтов образуют допустимую строку. Если входная строка содержит такую последовательность, эта кодировка будет отклонена, и будет проверена следующая кодировка.
string
Проверяемая строка (string).
encodings
Упорядоченный список кодировок символов. Список может быть указан как массив строк или как строка кодировок, разделённых запятыми.
Если encodings
не задан или является null
,
будет использоваться текущий detect_order (установленный с помощью
параметра конфигурации mbstring.detect_order
или функции mb_detect_order()).
strict
Управляет поведением, когда string
недопустима ни в одной из перечисленных encodings
.
Если для strict
установлено значение false
,
будет возвращена наиболее подходящая кодировка;
если для strict
установлено значение true
, будет возвращено false
.
Значение по умолчанию для strict
можно установить с помощью
параметра конфигурации mbstring.strict_detection.
Название кодировки символов или false
, если строка недопустима
ни в одной из перечисленных кодировок.
Пример #1 Пример использования mb_detect_encoding()
<?php
// Определение кодировки с текущим detect_order
echo mb_detect_encoding($str);
// "auto" раскрывается в соответствии с mbstring.language
echo mb_detect_encoding($str, "auto");
// Зададим список кодировок "encodings" в виде строки
echo mb_detect_encoding($str, "JIS, eucjp-win, sjis-win");
// Использование массива для задания возможных кодировок "encodings"
$encodings = [
"ASCII",
"JIS",
"EUC-JP"
];
echo mb_detect_encoding($str, $encodings);
?>
Пример #2 Действие параметра strict
<?php
// 'áéóú' закодирована в ISO-8859-1
$str = "\xE1\xE9\xF3\xFA";
// Строка недействительна в ASCII или UTF-8, но UTF-8 считается более близким соответствием
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], false));
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], true));
// Если допустимая кодировка найдена, параметр strict не меняет результат
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8', 'ISO-8859-1'], false));
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8', 'ISO-8859-1'], true));
?>
Результат выполнения данного примера:
string(5) "UTF-8" bool(false) string(10) "ISO-8859-1" string(10) "ISO-8859-1"
В некоторых случаях одна и та же последовательность байтов может образовывать допустимую строку в нескольких кодировках символов, и невозможно узнать, какая интерпретация предназначалась. Например, среди многих других байтовая последовательность "\xC4\xA2" может быть:
Пример #3 Использование порядка при совпадении нескольких кодировок
<?php
$str = "\xC4\xA2";
// Строка действительна во всех трех кодировках, поэтому будет возвращена первая из перечисленных кодировок.
var_dump(mb_detect_encoding($str, ['UTF-8', 'ISO-8859-1', 'ISO-8859-5']));
var_dump(mb_detect_encoding($str, ['ISO-8859-1', 'ISO-8859-5', 'UTF-8']));
var_dump(mb_detect_encoding($str, ['ISO-8859-5', 'UTF-8', 'ISO-8859-1']));
?>
Результат выполнения данного примера:
string(5) "UTF-8" string(10) "ISO-8859-1" string(10) "ISO-8859-5"