Strtolower: примеры (PHP)

Полное руководство по функции strtolower в PHP с примерами
Раздел: Работа со строками
strtolower(string string): string
Описание функции strtolower

Функция strtolower преобразует все символы алфавита в переданной строке в нижний регистр. Эта функция часто применяется для нормализации строковых данных перед сравнением, сохранением в базу данных или обработкой, когда регистр символов не имеет значения.

Функция используется в случаях, когда требуется унифицировать строку без учета регистра букв. Например, при сравнении введенных пользователем данных, обработке названий файлов, создании URL-адресов или тегов.

Синтаксис функции прост: strtolower(string $string): string. Единственный параметр $string представляет собой входную строку, которую необходимо преобразовать. Функция возвращает новую строку, где все буквенные символы ASCII (A-Z) заменены на соответствующие строчные (a-z). Важно отметить, что функция не затрагивает неалфавитные символы и буквы, уже находящиеся в нижнем регистре.

Стоит обратить внимание, что strtolower работает только с символами кодировки ASCII. Для многобайтовых строк, таких как UTF-8, следует использовать функцию mb_strtolower.

Базовые примеры использования
Простое преобразование строки
<?
$str = "Hello World!";
echo strtolower($str);
?>
hello world!
Преобразование строки с неалфавитными символами
<?
$str = "PHP 8.1 & MySQL 8.0";
echo strtolower($str);
?>
php 8.1 & mysql 8.0
Использование с кириллицей (некорректное)
<?
$str = "Привет Мир";
echo strtolower($str); // Не сработает для кириллицы
?>
Привет Мир
Сравнение строк без учета регистра
<?
$input = "Admin";
if (strtolower($input) === "admin") {
    echo "Доступ разрешен";
}
?>
Доступ разрешен
Похожие функции в PHP

В PHP существует несколько функций для работы с регистром символов, каждая из которых имеет свои особенности применения.

mb_strtolower

Функция mb_strtolower предназначена для многобайтовых строк (например, UTF-8). Она корректно обрабатывает символы различных алфавитов, включая кириллицу, греческий, арабский и другие. Использовать ее предпочтительнее strtolower при работе с текстом, содержащим не-ASCII символы.

Функция strtoupper выполняет обратное действие — преобразует все символы алфавита в верхний регистр. Как и strtolower, работает только с ASCII.

mb_strtoupper

Многобайтовый аналог strtoupper для работы с различными кодировками.

lcfirst и ucfirst

Функция lcfirst преобразует первый символ строки в нижний регистр, а ucfirst — в верхний. Эти функции полезны для форматирования имен или предложений.

Функция ucwords преобразует в верхний регистр первый символ каждого слова в строке. Часто используется для форматирования заголовков.

Выбор функции зависит от конкретной задачи: strtolower подходит для простого приведения ASCII-строк к нижнему регистру, а mb_strtolower — для работы с текстом на разных языках.

Типичные ошибки при использовании strtolower
Использование с не-ASCII символами

Самая распространенная ошибка — попытка преобразовать строку, содержащую символы не из набора ASCII, например, кириллицу.

<?
$text = "ПРИВЕТ";
$result = strtolower($text);
echo $result; // Ожидается "привет", но будет "ПРИВЕТ"
?>
ПРИВЕТ

Для решения этой проблемы необходимо использовать mb_strtolower с указанием кодировки.

Ожидание изменения оригинальной строки

Функция возвращает новую строку, не изменяя оригинальную переменную.

<?
$original = "Hello";
strtolower($original);
echo $original; // Выведет "Hello", а не "hello"
?>
Hello
Неучет локали для некоторых символов

Для символов, зависящих от локали (например, буква I в турецком языке), strtolower может давать неожиданный результат. В таких случаях следует использовать mb_strtolower с указанием локали.

Сравнение после преобразования без учета пробелов

При сравнении строк после приведения к нижнему регистру часто забывают обрезать пробелы.

<?
$input = "ADMIN ";
if (strtolower($input) === "admin") {
    echo "Совпадает"; // Этот код не выполнится
}
?>
(ничего не выведет)
Изменения в последних версиях PHP

Функция strtolower является одной из старейших в PHP и остается стабильной на протяжении многих версий. Существенных изменений в ее поведении в последних версиях PHP не было.

Однако в PHP 8 было усилено строгое типизирование. Теперь при передаче нестроковых значений в strtolower будет генерироваться ошибка типа TypeError, в то время как в более ранних версиях PHP такие значения преобразовывались в строки.

<?
// В PHP 7.x
$result = strtolower(123); // Преобразуется в "123"
// В PHP 8.x
$result = strtolower(123); // TypeError
?>

Также стоит отметить, что в PHP 8.1 появилась возможность передавать null в строковые функции, что вызывает уведомление об устаревании, а в будущих версиях будет вызывать ошибку.

Работа с кодировками по-прежнему остается важным аспектом. Разработчикам рекомендуется использовать mb_strtolower для многобайтовых строк, что особенно актуально в современных веб-приложениях, поддерживающих Unicode.

Расширенные примеры использования strtolower
Нормализация данных формы
Пример php
<?
// Приведение email к нижнему регистру перед сохранением
$email = "User@Example.COM";
$normalizedEmail = strtolower(trim($email));
echo $normalizedEmail; // "user@example.com"
?>
user@example.com
Создание URL-адресов или слагов
Пример php
<?
function generateSlug($title) {
    $slug = strtolower($title);
    $slug = preg_replace('/[^a-z0-9]+/', '-', $slug);
    $slug = trim($slug, '-');
    return $slug;
}

echo generateSlug("PHP 8 New Features!");
?>
php-8-new-features
Обработка HTTP-заголовков
Пример php
<?
// HTTP-заголовки нечувствительны к регистру, но для
// единообразия можно приводить их к нижнему регистру
$headers = ["Content-Type", "USER-AGENT", "Accept-Language"];
$normalizedHeaders = array_map('strtolower', $headers);
print_r($normalizedHeaders);
?>
Array
(
    [0] => content-type
    [1] => user-agent
    [2] => accept-language
)
Сравнение массивов строк без учета регистра
Пример php
<?
$allowedExtensions = ['jpg', 'png', 'gif'];
$uploadedFile = 'IMAGE.JPG';
$extension = pathinfo($uploadedFile, PATHINFO_EXTENSION);

if (in_array(strtolower($extension), $allowedExtensions)) {
    echo "Расширение файла допустимо";
}
?>
Расширение файла допустимо
Работа с конфигурационными массивами
Пример php
<?
$configKeys = [
    'DB_HOST' => 'localhost',
    'DB_USER' => 'root',
    'db_pass' => 'secret' // Обратите внимание на регистр
];

// Приведение всех ключей к нижнему регистру для единообразия
$normalizedConfig = [];
foreach ($configKeys as $key => $value) {
    $normalizedConfig[strtolower($key)] = $value;
}
print_r($normalizedConfig);
?>
Array
(
    [db_host] => localhost
    [db_user] => root
    [db_pass] => secret
)
Обработка CSV-файла с заголовками
Пример php
<?
$csvHeaders = ["ID", "Name", "Email", "Created_At"];
// Приведение заголовков к нижнему регистру
$normalizedHeaders = array_map('strtolower', $csvHeaders);
print_r($normalizedHeaders);
?>
Array
(
    [0] => id
    [1] => name
    [2] => email
    [3] => created_at
)
Комбинирование с другими строковыми функциями
Пример php
<?
$text = "  PHP 8 is AWESOME!!!  ";
$processed = strtolower(trim($text));
$processed = preg_replace('/[^a-z0-9\s]/', '', $processed);
$processed = preg_replace('/\s+/', ' ', $processed);
echo $processed;
?>
php 8 is awesome
Аналоги функции в других языках программирования

Strtolower в Python

В Python для преобразования строки в нижний регистр используется метод lower() строковых объектов. В отличие от PHP, он по умолчанию работает с Unicode.

text = "Hello World"
result = text.lower()
print(result)
hello world

Strtolower в Javascript

В JavaScript применяется метод toLowerCase(). Он также работает с Unicode символами.

let text = "Hello World";
let result = text.toLowerCase();
console.log(result);
hello world

Strtolower в MySQL

В SQL запросах MySQL используется функция LOWER() или LCASE(). Эти функции выполняют преобразование регистра для строк в результате запроса.

SELECT LOWER(username) FROM users;

Strtolower в Java

В Java для строк используется метод toLowerCase(). Можно указать локаль для корректного преобразования.

String str = "Hello World";
String result = str.toLowerCase();
C#

В C# применяется метод ToLower() класса String. Также существует ToLowerInvariant() для независимого от культуры преобразования.

string str = "Hello World";
string result = str.ToLower();

Основное отличие PHP функции strtolower от аналогов в других языках — ограниченная работа только с ASCII символами, в то время как аналоги в Python, JavaScript и других языках обычно поддерживают Unicode из коробки.

PHP strtolower function comments

En
Strtolower Make a string lowercase