Mb strtoupper: примеры (PHP)
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
Стандартная функция для преобразования строк в верхний регистр. Работает корректно только с однобайтовыми кодировками (например, 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 не установлено или не включено.
Указание неверной кодировки приводит к некорректному результату или предупреждениям.
<?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
$cities = ['москва', 'берлин', 'paris'];
$uppercased = array_map(fn($city) => mb_strtoupper($city, 'UTF-8'), $cities);
print_r($uppercased);
?>Array
(
[0] => МОСКВА
[1] => БЕРЛИН
[2] => PARIS
)<?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)
Функция mb_strtoupper() следует правилам Unicode по умолчанию. Для турецкого языка, где есть особые правила (точка над I), может потребоваться дополнительная обработка через mb_convert_case() с локалью.
<?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É