Mb convert case: примеры (PHP)

Использование mb_convert_case для работы с многобайтовыми строками
Раздел: Многобайтовые строки
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');
Привет Мир И Вселенная
Режим fold для сравнения строк
$str1 = mb_convert_case("İstanbul", MB_CASE_FOLD, 'UTF-8');
$str2 = mb_convert_case("istanbul", MB_CASE_FOLD, 'UTF-8');
echo $str1 === $str2 ? 'равны' : 'разные';
равны
Simple режимы

Simple-режимы выполняют быстрые преобразования без дополнительных правил языка:

echo mb_convert_case("straße", MB_CASE_UPPER_SIMPLE, 'UTF-8');
STRASSE

Альтернативные функции PHP

Стандартные функции для ASCII

Функции 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');
��������
Использование с не-UTF строками

Функция ожидает многобайтовую строку:

$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

Без установленного расширения mbstring функция недоступна:

// Если расширение не загружено
mb_convert_case("текст", MB_CASE_UPPER);
Fatal error: Uncaught Error: Call to undefined function mb_convert_case()

Изменения в PHP

PHP 7.3

Добавлены константы MB_CASE_FOLD, MB_CASE_UPPER_SIMPLE, MB_CASE_LOWER_SIMPLE, MB_CASE_TITLE_SIMPLE, MB_CASE_FOLD_SIMPLE для более гибкого управления преобразованием регистра.

PHP 8.0

Параметр encoding стал nullable (может принимать значение null). Улучшена производительность и стабильность работы функции.

PHP 8.2

Оптимизирована внутренняя реализация, уменьшено потребление памяти при обработке больших строк.

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

Обработка многоязычного текста

Функция корректно обрабатывает смешанные языки:

Пример php
$text = "hello world, привет мир, こんにちは世界";
echo mb_convert_case($text, MB_CASE_TITLE, 'UTF-8');
Hello World, Привет Мир, こんにちは世界
Специфические символы

Обработка символов с диакритическими знаками:

Пример php
$text = "école café naïve";
echo mb_convert_case($text, MB_CASE_UPPER, 'UTF-8');
ÉCOLE CAFÉ NAÏVE
Немецкие символы

Особенности преобразования немецких символов:

Пример php
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
Греческие символы

Преобразование греческого текста с тонами:

Пример php
echo mb_convert_case("ὈΔΥΣΣΕΎΣ", MB_CASE_LOWER, 'UTF-8');
ὀδυσσεύς
Турецкие точки

Особенности турецкого языка:

Пример php
$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
Армянский текст

Преобразование армянских символов:

Пример php
echo mb_convert_case("Բարեւ աշխարհ", MB_CASE_UPPER, 'UTF-8');
ԲԱՐԵՒ ԱՇԽԱՐՀ
Обработка имен собственных

Для имен собственных можно комбинировать режимы:

Пример php
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 для сравнения:

Пример php
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)
Обработка длинных текстов

Функция эффективно работает с большими объемами текста:

Пример php
$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

В 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 в других языках.

PHP mb_convert_case function comments

En
Mb convert case Perform case folding on a string