Mb strtoupper: примеры (PHP)

Преобразование строк в верхний регистр с помощью mb_strtoupper
Раздел: Многобайтовые строки
mb_strtoupper(string $string, ?string $encoding = null): string

Функция mb_strtoupper в PHP

Функция mb_strtoupper() конвертирует строку, состоящую из символов в многобайтовых кодировках, в верхний регистр. Её применяют для корректной обработки строк на языках с нелатинским алфавитом (например, русский, греческий, арабский), где стандартная функция strtoupper() может работать некорректно.

Аргументы функции
  • string (обязательный): Исходная строка для преобразования.
  • encoding (необязательный): Кодировка входной строки и результата. Если не указана, используется внутренняя кодировка, установленная функцией mb_internal_encoding(). Рекомендуется всегда указывать явно (например, 'UTF-8').

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

Базовое преобразование
<?php
$str = 'привет мир!';
echo mb_strtoupper($str, 'UTF-8');
?>
ПРИВЕТ МИР!
Работа с разными алфавитами
<?php
$str = 'γεια σου κόσμε';
echo mb_strtoupper($str, 'UTF-8');
?>
ΓΕΙΑ ΣΟΥ ΚΟΣΜΕ
Явное указание кодировки
<?php
$str = 'café';
// Без указания кодировки (может зависеть от настроек сервера)
echo mb_strtoupper($str);
echo "\n";
// С указанием кодировки
еcho mb_strtoupper($str, 'UTF-8');
?>
CAFÉ
CAFÉ

Похожие функции в PHP

strtoupper()

Стандартная функция для преобразования строк в верхний регистр. Работает корректно только с однобайтовыми кодировками (например, ASCII, ISO-8859-1). Для кириллицы в UTF-8 вернёт строку без изменений или исказит её. Используют только для строк на английском языке или при полной уверенности в кодировке.

Универсальная функция для изменения регистра с поддержкой многобайтовых кодировок. Принимает режим преобразования: MB_CASE_UPPER, MB_CASE_LOWER, MB_CASE_TITLE. Функция mb_strtoupper($str) эквивалентна mb_convert_case($str, MB_CASE_UPPER).

Типичные ошибки

Отсутствие расширения mbstring

Функция недоступна, если расширение mbstring не установлено или не включено.

Неверная кодировка

Указание неверной кодировки приводит к некорректному результату или предупреждениям.

<?php
// Строка в UTF-8, но указана кодировка Windows-1251
$str = 'тест';
echo mb_strtoupper($str, 'Windows-1251');
?>
Может вывести "????" или искаженные символы.
Использование для нестроковых значений
<?php
$num = 123;
echo mb_strtoupper($num, 'UTF-8');
?>
Будет выведено "123", но это может привести к неявному преобразованию типов и скрытым ошибкам.

Изменения в последних версиях PHP

В PHP 8.0 параметр encoding стал необязательным (nullable). Передача null теперь равнозначна использованию внутренней кодировки. В более ранних версиях это могло вызвать предупреждение. В PHP 7.3 и более ранних версиях настоятельно рекомендуется всегда явно указывать кодировку.

Расширенные примеры

Обработка массива строк
Пример php
<?php
$cities = ['москва', 'берлин', 'paris'];
$uppercased = array_map(fn($city) => mb_strtoupper($city, 'UTF-8'), $cities);
print_r($uppercased);
?>
Array
(
    [0] => МОСКВА
    [1] => БЕРЛИН
    [2] => PARIS
)
Сравнение строк без учета регистра
Пример php
<?php
function mb_case_insensitive_compare($str1, $str2, $encoding = 'UTF-8') {
    return mb_strtoupper($str1, $encoding) === mb_strtoupper($str2, $encoding);
}
$result = mb_case_insensitive_compare('Привет', 'привет', 'UTF-8');
var_dump($result);
?>
bool(true)
Работа с турецким языком и точками над i

Функция mb_strtoupper() следует правилам Unicode по умолчанию. Для турецкого языка, где есть особые правила (точка над I), может потребоваться дополнительная обработка через mb_convert_case() с локалью.

Пример php
<?php
$str = 'ıstanbul';
// Стандартное преобразование
еcho mb_strtoupper($str, 'UTF-8'); // ISTANBUL (I без точки)
echo "\n";
// С использованием локали (если требуется особое поведение)
setlocale(LC_CTYPE, 'tr_TR.UTF-8');
// Но mb_strtoupper не использует локаль напрямую
?>
ISTANBUL

Аналоги в других языках

Mb strtoupper в Python

Метод str.upper() по умолчанию корректно работает с Unicode.

text = 'привет мир!'
print(text.upper())
ПРИВЕТ МИР!

Mb strtoupper в Javascript

Метод String.prototype.toUpperCase() также поддерживает Unicode.

let text = 'γεια σου';
console.log(text.toUpperCase());
ΓΕΙΑ ΣΟΥ

Mb strtoupper в MySQL

Функция UPPER(). Для корректной работы с Unicode важно использовать соответствующую кодировку таблицы (например, utf8mb4).

SELECT UPPER('café') AS result;
CAFÉ

PHP mb_strtoupper function comments

En
Mb strtoupper Make a string uppercase