Mb preferred mime name: примеры (PHP)

Использование mb_preferred_mime_name для получения MIME-имён кодировок
Раздел: Многобайтовые строки
mb_preferred_mime_name(string $encoding): string|false

Функция mb_preferred_mime_name в PHP возвращает предпочтительное MIME-имя для указанной кодировки символов. Эта функция применяется при работе с многобайтовыми кодировками, в основном для корректного указания кодировки в заголовках HTTP, например, в заголовке Content-Type.

Описание функции

Функция является частью модуля mbstring (Multibyte String), который расширяет возможности стандартных строковых функций PHP для работы с многобайтовыми кодировками, такими как UTF-8, EUC-JP, SJIS и другие.

Аргументы
  • encoding (обязательный) – строка, содержащая имя кодировки, для которой требуется получить MIME-имя. Это может быть как стандартное имя кодировки (например, "UTF-8"), так и одно из её псевдонимов.
Возвращаемое значение

Функция возвращает строку с предпочтительным MIME-именем для указанной кодировки. Если кодировка неизвестна или функция не может определить MIME-имя, возвращается false.

Примеры использования
Базовый пример

Получение MIME-имени для кодировки UTF-8.

<?php
$mime = mb_preferred_mime_name("UTF-8");
echo $mime;
?>
UTF-8
Пример с альтернативным именем кодировки

Функция работает с различными псевдонимами кодировок.

<?php
$mime = mb_preferred_mime_name("utf8");
echo $mime;
?>
UTF-8
Пример с японской кодировкой
<?php
$mime = mb_preferred_mime_name("SJIS");
echo $mime;
?>
Shift_JIS
Пример с неизвестной кодировкой
<?php
$mime = mb_preferred_mime_name("UNKNOWN_ENCODING");
var_dump($mime);
?>
bool(false)
Похожие функции в PHP

В PHP нет прямой альтернативы для получения MIME-имени кодировки, но есть функции для работы с кодировками.

Возвращает массив всех поддерживаемых кодировок. Может использоваться для проверки, поддерживается ли конкретная кодировка, но не даёт MIME-имён.

<?php
$encodings = mb_list_encodings();
print_r($encodings);
?>

Получает или устанавливает кодировку вывода для HTTP. Полезна для установки кодировки, но не возвращает MIME-имя.

<?php
mb_http_output("UTF-8");
echo mb_http_output();
?>
UTF-8
Когда что использовать

mb_preferred_mime_name применяется, когда нужно именно MIME-имя для заголовков. Для простой проверки кодировок используют mb_list_encodings, а для управления выводом – mb_http_output.

Типичные ошибки
Передача неверного типа аргумента

Функция ожидает строку. Передача другого типа может привести к неожиданному поведению.

<?php
$mime = mb_preferred_mime_name(123);
var_dump($mime);
?>
bool(false)
Использование без установленного модуля mbstring

Если модуль mbstring не загружен, функция будет недоступна.

<?php
// При отключённом mbstring
$mime = mb_preferred_mime_name("UTF-8");
?>
Fatal error: Uncaught Error: Call to undefined function mb_preferred_mime_name()
Неучёт регистра кодировки

Некоторые кодировки чувствительны к регистру. Рекомендуется использовать стандартные имена.

<?php
$mime = mb_preferred_mime_name("utf-8");
echo $mime;
?>
UTF-8
Изменения в версиях PHP

Функция mb_preferred_mime_name была добавлена в PHP 4.0.6. С тех пор её поведение остаётся стабильным.

PHP 8.0 и выше

В PHP 8.0 не было значительных изменений в работе этой функции. Однако, в целом, в PHP 8 усилилась строгость типов, поэтому передача неверного типа аргумента может чаще приводить к ошибкам или предупреждениям.

В PHP 8.2 также не было изменений, специфичных для этой функции.

Расширенные примеры
Генерация HTTP-заголовка

Использование функции для установки правильного заголовка Content-Type.

Пример php
<?php
$encoding = "UTF-8";
$mime_name = mb_preferred_mime_name($encoding);
header("Content-Type: text/html; charset=" . $mime_name);
?>
Проверка поддержки кодировки перед использованием

Комбинирование с mb_list_encodings для безопасного получения MIME-имени.

Пример php
<?php
$encoding = "EUC-JP";
if (in_array($encoding, mb_list_encodings())) {
    $mime = mb_preferred_mime_name($encoding);
    echo "MIME-имя для $encoding: $mime";
} else {
    echo "Кодировка $encoding не поддерживается.";
}
?>
MIME-имя для EUC-JP: EUC-JP
Обработка нескольких кодировок

Получение MIME-имён для списка кодировок.

Пример php
<?php
$encodings = ["UTF-8", "SJIS", "ISO-8859-1", "UNKNOWN"];
foreach ($encodings as $enc) {
    $mime = mb_preferred_mime_name($enc);
    echo "$enc: " . ($mime ? $mime : "Не найдено") . "<br>";
}
?>
UTF-8: UTF-8
SJIS: Shift_JIS
ISO-8859-1: ISO-8859-1
UNKNOWN: Не найдено
Использование в классе для отправки email

Пример интеграции в метод отправки email с указанием кодировки.

Пример php
<?php
class MailSender {
    private $encoding;

    public function setEncoding($encoding) {
        $this->encoding = $encoding;
    }

    public function getContentTypeHeader() {
        $mime = mb_preferred_mime_name($this->encoding);
        return "Content-Type: text/plain; charset=" . $mime;
    }
}

$mailer = new MailSender();
$mailer->setEncoding("UTF-8");
echo $mailer->getContentTypeHeader();
?>
Content-Type: text/plain; charset=UTF-8
Альтернативы в других языках

Mb preferred mime name в Python

В Python нет прямой аналогичной функции. Для получения MIME-типа кодировки обычно используют словари или библиотеку charset-normalizer.

import mimetypes
mimetypes.add_type('text/html; charset=utf-8', '.html')
# Прямого аналога нет

Mb preferred mime name в Javascript

В браузерном JavaScript нет стандартной функции для получения MIME-имени кодировки. Кодировка обычно указывается в заголовке Content-Type сервера или в мета-теге HTML.

// Аналогов в нативном JS нет
// Кодировка может быть получена из document.characterSet

Mb preferred mime name в MySQL

В MySQL есть функция CHARSET, которая возвращает кодировку строки, но не MIME-имя.

SELECT CHARSET('текст');
utf8mb4
Отличия

PHP функция уникальна своей прямой задачей – возврат MIME-имени кодировки. В других языках это обычно делается через дополнительные библиотеки или вручную.

PHP mb_preferred_mime_name function comments

En
Mb preferred mime name Get MIME charset string