mb_detect_encoding

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

mb_detect_encodingОпределение кодировки символов

Описание

mb_detect_encoding(string $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" может быть:

  • "Ä¢" (U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS с последующим U+00A2 CENT SIGN) закодирована в ISO-8859-1, ISO-8859-15 или Windows-1252
  • "ФЂ" (U+0424 CYRILLIC CAPITAL LETTER EF с последующим U+0402 CYRILLIC CAPITAL LETTER DJE) закодирована в ISO-8859-5
  • "Ģ" (U+0122 LATIN CAPITAL LETTER G WITH CEDILLA) закодирована в UTF-8

Пример #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"

Смотрите также

  • mb_detect_order() - Установка/получение списка кодировок для механизмов определения кодировки