Приведение строк к строчному регистру средствами PHP

Раздел: PHP -> Работа со строками

В PHP преобразование строки в нижний регистр является частой операцией. Наиболее правильным и универсальным способом является использование функции mb_strtolower(), которая корректно обрабатывает многобайтовые кодировки, такие как UTF-8.

Основное решение: mb_strtolower() для многобайтовых строк

Как сделать все буквы строки маленькими с учетом кодировки UTF-8?

Функция mb_strtolower() принимает строку и опционально второй параметр - кодировку. Если кодировка не указана, используется внутренняя кодировка, которую можно задать через mb_internal_encoding().


<?php
$text = 'Привет МИР!';
$lower = mb_strtolower($text);
echo $lower; // привет мир!
?>

удалить html теги php (php удалить html теги)

Результат:

привет мир!

Php без учета регистра (игнорирование регистра в php)

Рекомендация: Для работы с многобайтными строками (русский, китайский, арабский) всегда используется mb_strtolower, так как strtolower может искажать символы.

Проблема: Если не установлено расширение mbstring, функция будет недоступна. В современных версиях PHP расширение обычно включено, но на старых серверах может отсутствовать. Решение: проверить наличие function_exists('mb_strtolower') или использовать polyfill.

Ошибка: Передача некорректной кодировки в качестве второго параметра. Например, mb_strtolower($text, 'UTF-8') работает, но если указать неверную кодировку, результат будет непредсказуем.

Вариант 1: strtolower() для однобайтовых кодировок

Когда можно использовать strtolower и какие есть ограничения?

Функция strtolower() работает только с однобайтовыми кодировками (например, ASCII, ISO-8859-1). Для латиницы она подходит идеально, но для кириллицы в UTF-8 она испортит символы.


<?php
$text = 'Hello World!';
echo strtolower($text); // hello world!

$russian = 'Привет';
echo strtolower($russian); // по�?�?ет (искажение)
?>

Php new line (символ новой строки в php)

Результат:

hello world!
привет (но неверно для кириллицы в UTF-8)

Php маленькие буквы (преобразование строки в нижний регистр в php)

Проблема: Для строк в UTF-8 strtolower преобразует только байты, а не символы, что приводит к потере данных. Используется только для однобайтовых наборов символов.

Типичная ошибка: Применение к строкам из базы данных или форм, где кодировка UTF-8. В результате русские буквы превращаются в 'кракозябры'.


Вариант 2: mb_convert_case() с флагом MB_CASE_LOWER

Чем mb_convert_case отличается от mb_strtolower?

Функция mb_convert_case() выполняет преобразование регистра с указанием режима. Для нижнего регистра используется константа MB_CASE_LOWER. Результат аналогичен mb_strtolower, но функция более гибкая (можно сделать верхний регистр или регистр заголовка).


<?php
$text = 'Функция MB_CONVERT_CASE';
$lower = mb_convert_case($text, MB_CASE_LOWER, 'UTF-8');
echo $lower; // функция mb_convert_case
?>

Php end of line (символ конца строки в php)

Результат:

функция mb_convert_case

удалить пробел в строке php (php удалить пробелы в строке)

Проблема: Для MB_CASE_LOWER_GERMAN? нет, просто MB_CASE_LOWER. Однако не все версии PHP поддерживают MB_CASE_LOWER? Поддерживается с PHP 4.3.0.


Вариант 3: filter_var с пользовательской функцией

Как преобразовать строку в нижний регистр с помощью filter_var?

Можно использовать фильтр FILTER_CALLBACK и передать функцию mb_strtolower.


<?php
$text = 'Фильтр CALLBACK';
$lower = filter_var($text, FILTER_CALLBACK, array('options' => 'mb_strtolower'));
echo $lower; // фильтр callback
?>

Php первая заглавная (преобразование первой буквы в заглавную в php)

Результат:

фильтр callback

Php strip tags (удаление html тегов функцией strip_tags)

Этот подход удобен, когда требуется применить фильтрацию в цепочке обработки данных.

Проблема: filter_var ожидает callback в виде имени функции или массива. Строковая передача работает только для функций с одним аргументом. Для mb_strtolower с дополнительной кодировкой нужно оборачивать в анонимную функцию.


Вариант 4: strtr() для замены символов

Как вручную преобразовать регистр с помощью strtr?

Теоретически можно составить таблицу замен для всех возможных букв, но это непрактично. Пример для латиницы:


<?php
$text = 'ABC Def';
$lower = strtr($text, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');
echo $lower; // abc def
?>

Php вхождение подстроки (поиск подстроки в строке в php)

Проблема: Не охватывает кириллицу, спецсимволы, неэффективно. Не рекомендуется.


Вариант 5: Работа с массивами строк

Как преобразовать все строки в массиве в нижний регистр?

Используется array_map() с mb_strtolower.


<?php
$words = array('Первый', 'ВТОРОЙ', 'тРЕТИЙ');
$lowerWords = array_map('mb_strtolower', $words);
print_r($lowerWords);
?>

Php str contains (проверка наличия подстроки в php)

Результат:

Array ( [0] => первый [1] => второй [2] => третий )
- Str search php (поиск в строке php)
- Php длина строки (длина строки php)
- Php str replace (замена в строке php)

Ниже приведены расширенные примеры использования функций преобразования в нижний регистр с различными сценариями.

Пример

<?php
// Пример 1: Обработка пользовательского ввода (utf-8)
$input = '  Привет Мир!  ';
$clean = trim(mb_strtolower($input));
echo 'Результат: ' . $clean;
?>
Результат: привет мир!
Пример

<?php
// Пример 2: Сравнение строк без учета регистра
$str1 = 'Привет';
$str2 = 'привет';
if (mb_strtolower($str1) === mb_strtolower($str2)) {
    echo 'Строки равны (без учета регистра)';
}
?>
Строки равны (без учета регистра)
Пример

<?php
// Пример 3: Использование mb_strtolower с разными кодировками
$text_cp1251 = iconv('UTF-8', 'CP1251', 'ПрИвЕт'); // перекодируем
$lower_cp1251 = mb_strtolower($text_cp1251, 'CP1251');
echo mb_detect_encoding($lower_cp1251) . PHP_EOL;
echo iconv('CP1251', 'UTF-8', $lower_cp1251);
?>
CP1251
привет
Пример

<?php
// Пример 4: Преобразование только первого символа в нижний регистр (lcfirst)
$text = 'Привет Мир';
$lowerFirst = mb_strtolower(mb_substr($text, 0, 1, 'UTF-8')) . mb_substr($text, 1, null, 'UTF-8');
echo $lowerFirst; // привет Мир (первая буква стала строчной)
?>
привет Мир
Пример

<?php
// Пример 5: Использование preg_replace_callback для выборочного преобразования
$text = 'Один Два Три';
$lower = preg_replace_callback('/[А-Я]/u', function($m) {
    return mb_strtolower($m[0]);
}, $text);
echo $lower; // один два три
?>
один два три
Пример

<?php
// Пример 6: Применение в многобайтовых строках с использованием setlocale (не рекомендуется)
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
$text = 'ТЕСТ';
$lower = strtolower($text);
echo $lower;
?>
тест (если локаль установлена корректно)
Пример

<?php
// Пример 7: Преобразование ключей массива в нижний регистр
$data = array('Name' => 'John', 'Surname' => 'Doe');
$lowerKeys = array_combine(array_map('mb_strtolower', array_keys($data)), $data);
print_r($lowerKeys);
?>
Array ( [name] => John [surname] => Doe )

При работе с функциями преобразования регистра важно учитывать кодировку данных. Для проектов, использующих UTF-8, единственным надежным выбором является семейство mb_* функций.

Преобразование строки в нижний регистр в PHP - comments

En
Php маленькие буквы (php)