Mb language: примеры (PHP)
mb_language(?string $language = null): string|boolФункция mb_language() устанавливает или возвращает текущий язык для многобайтовых строковых функций. Эта настройка влияет на поведение таких функций как mb_send_mail(), определяя кодировку и правила преобразования символов для электронной почты.
Функция используется в основном при работе с отправкой почты в различных языковых окружениях, чтобы правильно кодировать символы в заголовках и теле письма.
- language (необязательный) - строковый параметр, задающий язык. Если параметр опущен, функция возвращает текущую установку.
- Допустимые значения:
'uni'(UTF-8),'neutral','Russian','English','Japanese'и другие, зависящие от конфигурации mbstring.
Пример 1: Установка и получение текущего языка.
<?
// Получение текущего языка
$current_lang = mb_language();
echo "Текущий язык: $current_lang\n";
// Установка языка 'Russian'
mb_language('Russian');
echo "Новый язык: " . mb_language();
?>Текущий язык: neutral Новый язык: Russian
Пример 2: Использование с функцией mb_send_mail.
<?
mb_language('uni'); // Установка UTF-8 кодировки для почты
$to = 'test@example.com';
$subject = mb_encode_mimeheader('Тема письма с русскими буквами', 'UTF-8');
$message = 'Тело письма.';
$headers = 'Content-Type: text/plain; charset=UTF-8';
// Отправка письма с корректной кодировкой
// mb_send_mail($to, $subject, $message, $headers);
echo "Параметры языка для отправки почты установлены.";
?>Параметры языка для отправки почты установлены.
Прямых аналогов mb_language() в PHP нет, так как её цель специфична. Однако для работы с кодировками и локалью используются другие функции:
setlocale()- устанавливает региональные настройки (локаль) для форматирования дат, чисел и т.д. Влияет на категории вродеLC_CTYPE, но не на отправку почты.mb_internal_encoding()- устанавливает внутреннюю кодировку скрипта для многобайтовых строк.iconv_set_encoding()- устанавливает кодировку для iconv функций.
Функция mb_language() предпочтительна, когда требуется специфическая настройка для mb_send_mail(). В остальных случаях для управления кодировкой строк используют mb_internal_encoding().
Ошибка 1: Попытка установить несуществующий язык.
<?
// Передано некорректное значение
$result = mb_language('Klingon');
if ($result === false) {
echo "Функция вернула false: неверный параметр языка.\n";
}
// В PHP 8 может генерироваться предупреждение
?>Warning: mb_language(): Unknown language "Klingon" in ... Функция вернула false: неверный параметр языка.
Ошибка 2: Непонимание области действия. Установка влияет на все последующие вызовы mb-функций в скрипте.
<?
mb_language('Japanese');
// ... другой код ...
// Если забыть об установке, mb_send_mail может использовать не ту кодировку
?>- PHP 8.0: Функция стала более строгой к неверным значениям параметра
language. Вместо молчаливого игнорирования некорректных значений теперь может выдаваться предупреждение (E_WARNING), а функция возвращаетfalse. - До PHP 8.0 поведение могло различаться в зависимости от версии mbstring, и некорректный язык иногда мог игнорироваться без сообщений.
Пример 1: Временное изменение языка для конкретной операции с восстановлением исходного.
<?
function sendMailInJapanese($to, $subject, $message) {
$old_lang = mb_language(); // Сохраняем текущий язык
mb_language('Japanese');
// Настройка заголовков для японской кодировки
$headers = [
'Content-Type: text/plain; charset=ISO-2022-JP',
'Content-Transfer-Encoding: 7bit'
];
// Имитация отправки (для примера вывод)
echo "Письмо отправлено с языком: " . mb_language() . "\n";
// mb_send_mail($to, $subject, $message, implode("\r\n", $headers));
mb_language($old_lang); // Восстанавливаем язык
return "Готово";
}
mb_language('neutral');
echo "Язык до вызова: " . mb_language() . "\n";
echo sendMailInJapanese('test@example.com', '主題', '本文') . "\n";
echo "Язык после вызова: " . mb_language() . "\n";
?>Язык до вызова: neutral Письмо отправлено с языком: Japanese Готово Язык после вызова: neutral
Пример 2: Проверка поддержки языка.
<?
$test_languages = ['Russian', 'English', 'Japanese', 'uni', 'invalid_lang'];
foreach ($test_languages as $lang) {
$result = @mb_language($lang); // Подавляем предупреждение для примера
if ($result !== false) {
echo "Язык '$lang' поддерживается.\n";
mb_language('neutral'); // Сброс для следующей итерации
} else {
echo "Язык '$lang' НЕ поддерживается.\n";
}
}
?>Язык 'Russian' поддерживается. Язык 'English' поддерживается. Язык 'Japanese' поддерживается. Язык 'uni' поддерживается. Язык 'invalid_lang' НЕ поддерживается.
Пример 3: Влияние на преобразование кодировок (косвенное). Некоторые функции mbstring, например, для почты, используют установленный язык для выбора правил преобразования.
<?
mb_language('uni'); // UTF-8
// mb_send_mail будет использовать UTF-8 кодировку по умолчанию для писем
mb_language('Japanese');
// mb_send_mail может использовать ISO-2022-JP для писем
?>Концепция установки "языка" для строковых операций специфична для расширения mbstring в PHP. В других языках подходы к управлению кодировкой и локализацией отличаются.
Mb language в Python
В Python кодировка обычно указывается явно при операциях с байтами и строками, либо через настройки локали модуля locale.
import locale
# Установка локали (влияет на разные аспекты, похоже на setlocale в PHP)
locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
print(locale.getlocale())('ru_RU', 'UTF-8')Mb language в Javascript
В JavaScript строки представляют собой последовательности символов UTF-16. Явного аналога нет, но для отправки данных, например, с помощью Fetch API, кодировка указывается в заголовках.
// Кодировка обычно управляется заголовками HTTP
const headers = new Headers({
'Content-Type': 'text/plain; charset=UTF-8'
});Mb language в MySQL
В MySQL используются настройки кодировки соединения, базы данных, таблиц и колонок. Аналога прямой функции нет.
SET NAMES 'utf8mb4';