array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'function.mb-detect-encoding.php', 1 => 'mb_detect_encoding', ), 'up' => array ( 0 => 'ref.mbstring.php', 1 => 'Функции для работы с многобайтовыми строками', ), 'prev' => array ( 0 => 'function.mb-decode-numericentity.php', 1 => 'mb_decode_numericentity', ), 'next' => array ( 0 => 'function.mb-detect-order.php', 1 => 'mb_detect_order', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/mbstring/functions/mb-detect-encoding.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(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
,
проверяя список кандидатов по порядку.
Автоматическое определение предполагаемой кодировки символов не полностью надёжно; без дополнительной информации это похоже на расшифровку зашифрованной строки без ключа. Лучше предпочесть указание кодировки символов, хранящейся или передаваемой с данными, например в 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
,
если строка недопустима ни для одной из перечисленных кодировок.
Версия | Описание |
---|---|
8.2.0 |
Функция mb_detect_encoding() больше не будет возвращать
следующие нетекстовые кодировки:
«Base64» , «QPrint» ,
«UUencode» , «HTML entities» ,
«7 bit» и «8 bit» .
|
Пример #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"