Mb convert case: примеры (PHP)
mb_convert_case(string $string, int $mode, ?string $encoding = null): stringФункция mb_convert_case
Функция mb_convert_case преобразует регистр символов в многобайтовых строках, корректно обрабатывая символы UTF-8 и других кодировок. Эта функция используется при работе с текстами на различных языках, где стандартные функции PHP вроде strtoupper могут работать некорректно.
Функция применяется для изменения регистра строк, содержащих символы за пределами ASCII: кириллицу, иероглифы, символы с диакритическими знаками. Она гарантирует корректное преобразование для различных языков.
mb_convert_case(string $string, int $mode, ?string $encoding = null): string
Параметры функции:
- $string - входная строка для преобразования
- $mode - режим преобразования: MB_CASE_UPPER, MB_CASE_LOWER, MB_CASE_TITLE, MB_CASE_FOLD, MB_CASE_UPPER_SIMPLE, MB_CASE_LOWER_SIMPLE, MB_CASE_TITLE_SIMPLE, MB_CASE_FOLD_SIMPLE
- $encoding - необязательный параметр кодировки. Если не указан, используется внутренняя кодировка
Примеры использования
Преобразование в верхний регистр:
echo mb_convert_case("привет мир", MB_CASE_UPPER, 'UTF-8');ПРИВЕТ МИР
Преобразование в нижний регистр:
echo mb_convert_case("ПРИВЕТ МИР", MB_CASE_LOWER, 'UTF-8');привет мир
Режим MB_CASE_TITLE преобразует первые буквы слов в заглавные:
echo mb_convert_case("привет мир и вселенная", MB_CASE_TITLE, 'UTF-8');Привет Мир И Вселенная
$str1 = mb_convert_case("İstanbul", MB_CASE_FOLD, 'UTF-8');
$str2 = mb_convert_case("istanbul", MB_CASE_FOLD, 'UTF-8');
echo $str1 === $str2 ? 'равны' : 'разные';равны
Simple-режимы выполняют быстрые преобразования без дополнительных правил языка:
echo mb_convert_case("straße", MB_CASE_UPPER_SIMPLE, 'UTF-8');STRASSE
Альтернативные функции PHP
Функции strtoupper, strtolower, ucfirst, ucwords работают только с однобайтовыми кодировками. Они не подходят для многобайтовых строк.
Функции mb_strtoupper и mb_strtolower выполняют аналогичные преобразования, но только для верхнего и нижнего регистра.
Для однобайтовых строк можно использовать стандартные функции. Для многобайтовых строк предпочтительнее mb_convert_case или специализированные многобайтовые функции. Функция mb_convert_case предоставляет больше возможностей благодаря различным режимам.
Типичные ошибки
Указание неверной кодировки приводит к некорректному результату:
// Неправильно для UTF-8 строки
echo mb_convert_case("привет", MB_CASE_UPPER, 'ISO-8859-1');��������
Функция ожидает многобайтовую строку:
$binary = file_get_contents('image.jpg');
echo mb_convert_case($binary, MB_CASE_UPPER); // Непредсказуемый результатИспользование несуществующего режима вызывает ошибку:
// Неправильный режим 99
mb_convert_case("текст", 99, 'UTF-8');Warning: mb_convert_case(): Unknown mode in ...
Без установленного расширения mbstring функция недоступна:
// Если расширение не загружено
mb_convert_case("текст", MB_CASE_UPPER);Fatal error: Uncaught Error: Call to undefined function mb_convert_case()
Изменения в PHP
Добавлены константы MB_CASE_FOLD, MB_CASE_UPPER_SIMPLE, MB_CASE_LOWER_SIMPLE, MB_CASE_TITLE_SIMPLE, MB_CASE_FOLD_SIMPLE для более гибкого управления преобразованием регистра.
Параметр encoding стал nullable (может принимать значение null). Улучшена производительность и стабильность работы функции.
Оптимизирована внутренняя реализация, уменьшено потребление памяти при обработке больших строк.
Расширенные примеры
Функция корректно обрабатывает смешанные языки:
$text = "hello world, привет мир, こんにちは世界";
echo mb_convert_case($text, MB_CASE_TITLE, 'UTF-8');Hello World, Привет Мир, こんにちは世界
Обработка символов с диакритическими знаками:
$text = "école café naïve";
echo mb_convert_case($text, MB_CASE_UPPER, 'UTF-8');ÉCOLE CAFÉ NAÏVE
Особенности преобразования немецких символов:
echo mb_convert_case("straße", MB_CASE_UPPER, 'UTF-8');
echo mb_convert_case("straße", MB_CASE_UPPER_SIMPLE, 'UTF-8');STRASSE STRASSE
Преобразование греческого текста с тонами:
echo mb_convert_case("ὈΔΥΣΣΕΎΣ", MB_CASE_LOWER, 'UTF-8');ὀδυσσεύς
Особенности турецкого языка:
$original = "İstanbul";
$lower = mb_convert_case($original, MB_CASE_LOWER, 'UTF-8');
$upper = mb_convert_case($lower, MB_CASE_UPPER, 'UTF-8');
echo "$original → $lower → $upper";İstanbul → istanbul → İSTANBUL
Преобразование армянских символов:
echo mb_convert_case("Բարեւ աշխարհ", MB_CASE_UPPER, 'UTF-8');ԲԱՐԵՒ ԱՇԽԱՐՀ
Для имен собственных можно комбинировать режимы:
function formatName($name) {
$lower = mb_convert_case($name, MB_CASE_LOWER, 'UTF-8');
return mb_convert_case($lower, MB_CASE_TITLE, 'UTF-8');
}
echo formatName("ИВАН ИВАНОВ");Иван Иванов
Использование MB_CASE_FOLD для сравнения:
function compareIgnoreCase($str1, $str2) {
$fold1 = mb_convert_case($str1, MB_CASE_FOLD, 'UTF-8');
$fold2 = mb_convert_case($str2, MB_CASE_FOLD, 'UTF-8');
return $fold1 === $fold2;
}
var_dump(compareIgnoreCase('İstanbul', 'istanbul'));bool(true)
Функция эффективно работает с большими объемами текста:
$longText = str_repeat("Пример текста для преобразования регистра. ", 1000);
$start = microtime(true);
$result = mb_convert_case($longText, MB_CASE_UPPER, 'UTF-8');
$time = microtime(true) - $start;
echo "Обработано " . mb_strlen($longText) . " символов за $time секунд";Аналоги в других языках
В Python используются методы строк: upper(), lower(), title(), casefold().
text = "привет мир"
print(text.upper()) # ПРИВЕТ МИР
print(text.title()) # Привет МирMb convert case в Javascript
В JavaScript стандартные методы toUpperCase() и toLowerCase() работают с Unicode, но для некоторых языков могут потребоваться дополнительные библиотеки.
let text = "привет мир";
console.log(text.toUpperCase()); // ПРИВЕТ МИРMb convert case в MySQL
Функции UPPER(), LOWER() работают с UTF-8 при правильной настройке кодировки базы данных.
SELECT UPPER('привет мир'); -- ПРИВЕТ МИРВ отличие от PHP, другие языки обычно не имеют отдельной функции с множеством режимов, а предоставляют разные методы для каждого типа преобразования. Функция MB_CASE_FOLD в PHP имеет более широкие возможности по сравнению с простым lowercasing в других языках.