Как сделать первый символ заглавным в PHP: полное руководство

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

Методы преобразования первой буквы в заглавную

Основное универсальное решение:

Для преобразования первой буквы строки в заглавный регистр, независимо от кодировки (включая UTF-8), используется комбинация функций mb_strtoupper и mb_substr. Это гарантирует корректную работу с кириллицей, иероглифами и другими многобайтовыми символами.


$str = "привет мир";
$result = mb_strtoupper(mb_substr($str, 0, 1)) . mb_substr($str, 1);
echo $result; // "Привет мир"
  

Пояснение: функция mb_substr извлекает первый символ (длина 1), mb_strtoupper переводит его в верхний регистр, затем к результату приклеивается оставшаяся часть строки (начиная со второго символа).

Типичные проблемы:

  • Использование ucfirst с кириллицей в UTF-8 приводит к потере данных или выводу кракозябров, так как эта функция работает только с однобайтовыми кодировками (Latin-1).
  • Забыв указать кодировку в mb_substr и mb_strtoupper - по умолчанию используется внутренняя кодировка, которая может не совпадать с кодировкой строки. Рекомендуется явно передавать 'UTF-8' третьим параметром.
  • Пустая строка: если строка пуста, mb_substr вернёт пустую строку, и результат будет корректным.

Как сделать заглавной первую букву, если строка содержит только латиницу?

Для строк в однобайтовой кодировке (например, ASCII) можно использовать встроенную функцию ucfirst.


$str = "hello world";
echo ucfirst($str); // "Hello world"
  

Функция работает быстро, но не подходит для кириллицы, умляутов и других многобайтовых символов. Если строка гарантированно содержит только латиницу, это самый простой способ.

Ошибка: применение ucfirst к строке в UTF-8 с кириллицей. Вместо заглавной буквы появляется мусор. Решение: использовать mb_ функции.

Как сделать заглавной первую букву каждого слова в строке?

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


$str = "hello world from php";
echo ucwords($str); // "Hello World From Php"
  

Для мультибайтовых строк применяется mb_convert_case с флагом MB_CASE_TITLE.


$str = "привет мир из php";
echo mb_convert_case($str, MB_CASE_TITLE, 'UTF-8'); // "Привет Мир Из Php"
  

Важно: MB_CASE_TITLE делает заглавной первую букву каждого слова, а не только первого. Если нужно только первое слово, следует использовать комбинацию mb_*.

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

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

Можно использовать preg_replace_callback для замены первого символа. Этот способ избыточен, но полезен, если нужна дополнительная логика (например, игнорировать пробелы в начале).


$str = " example ";
$result = preg_replace_callback('/^(\s*)(\w)/u', function($m) {
    return $m[1] . mb_strtoupper($m[2], 'UTF-8');
}, $str);
echo $result; // " Example "
  

Пояснение: шаблон ищет ведущие пробелы (если есть) и первый буквенный символ. Замыкание возвращает пробелы и заглавную версию первого символа. Модификатор u включает поддержку UTF-8.

Ошибка: без модификатора u регулярное выражение не распознает кириллицу. Также стоит помнить, что \w соответствует только буквам, цифрам и подчёркиванию; для строго буквенного символа лучше использовать \p{L}.

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

Менее распространённый способ - использование strtr с таблицей перевода для первого символа. Но такой подход требует заранее задать все возможные заглавные эквиваленты и неудобен для мультибайтовых строк.


// только для латиницы
$str = "hello";
$first = substr($str, 0, 1);
$upper = strtr($first, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
$result = $upper . substr($str, 1);
echo $result; // "Hello"
  

Этот метод крайне негибкий и не рекомендуется для реальных проектов.

Дополнительные примеры и сценарии использования

Рассмотрим несколько расширенных ситуаций, которые помогут глубже понять особенности преобразования первой буквы.

Пример 1. Сравнение ucfirst и мультибайтового подхода для кириллицы

Пример

$str = "привет мир";
echo "ucfirst: " . ucfirst($str) . "\n";
echo "mb: " . mb_strtoupper(mb_substr($str, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($str, 1, null, 'UTF-8');
  
ucfirst: ?привет мир  (или кракозябры)
mb: Привет мир
  

Как видно, ucfirst не справляется с кириллицей в UTF-8, выводя искажённый символ. Мультибайтовый метод работает корректно.

Пример 2. Пустая строка

Пример

$str = "";
$result = mb_strtoupper(mb_substr($str, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($str, 1, null, 'UTF-8');
var_dump($result);
  
string(0) ""
  

Пустая строка остаётся пустой, ошибки не возникает.

Пример 3. Строка, начинающаяся с пробела

Пример

$str = "  hello";
$result = mb_strtoupper(mb_substr(ltrim($str), 0, 1, 'UTF-8'), 'UTF-8') . mb_substr(ltrim($str), 1, null, 'UTF-8');
echo $result; // "Hello" (пробелы отброшены)
// Если нужно сохранить пробелы:
$result2 = mb_strtoupper(mb_substr($str, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($str, 1, null, 'UTF-8');
echo $result2; // "  Hello" (пробел стал заглавным? Нет, пробел не буква, остаётся пробелом)
  
Hello
  Hello
  

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

Пример 4. Строка, начинающаяся с цифры

Пример

$str = "123abc";
$result = mb_strtoupper(mb_substr($str, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($str, 1, null, 'UTF-8');
echo $result; // "123abc" (цифра 1 не изменится)
  
123abc
  

Функция не изменяет небуквенные символы, что логично.

Пример 5. Юникодные символы (например, с диакритикой)

Пример

$str = "élève";
$result = mb_strtoupper(mb_substr($str, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($str, 1, null, 'UTF-8');
echo $result; // "Élève" (é → É)
  
Élève
  

Мультибайтовые функции корректно обрабатывают символы с диакритическими знаками.

Пример 6. Использование mb_convert_case для первого слова (не всего слова, а первого)

Можно комбинировать mb_convert_case с MB_CASE_TITLE, но это сделает заглавной первую букву каждого слова. Чтобы ограничиться только первым словом, используется разбиение по словам.

Пример

$str = "hello world";
$words = explode(' ', $str);
$words[0] = mb_convert_case($words[0], MB_CASE_TITLE, 'UTF-8');
$result = implode(' ', $words);
echo $result; // "Hello world"
  
Hello world
  

Пример 7. Использование lcfirst для обратного преобразования

Функция lcfirst делает первую букву строчной. Применяется, когда нужно инвертировать регистр.

Пример

$str = "Hello";
echo lcfirst($str); // "hello"
  
hello
  

Для мультибайтовых строк аналог: mb_strtolower(mb_substr(...)) . mb_substr(...).

Пример 8. Регулярное выражение с \p{L} для точного совпадения буквы

Пример

$str = "123привет";
$result = preg_replace_callback('/^(\s*)(\p{L})/u', function($m) {
    return $m[1] . mb_strtoupper($m[2], 'UTF-8');
}, $str);
echo $result; // "123Привет" (пропустил цифры, изменил первую букву "п")
  
123Привет
  

Использование \p{L} гарантирует, что будет найден именно буквенный символ Unicode, а не цифра или подчёркивание.

- Php format (форматирование строк в php)
- Php preg (регулярные выражения в php (preg))
- Php подстроки (получение подстроки в php)
- Php проверить строку (проверить строку в php)
- Character php (символы php)
- Php вхождение подстроки (поиск подстроки в строке в php)
- Php strip tags (удаление html тегов функцией strip_tags)
- Php текст (работа с текстом в php)
- удалить пробел в строке php (php удалить пробелы в строке)
- Php replace (замена строк в php)
- Php символ (работа с символами в php)
- Php find (поиск в php)
- Str search php (поиск в строке php)
- Php длина строки (длина строки php)
- Php пробел (удаление пробелов в php)
- Php символ строки (работа с символами строки в php)
- Php первые символов (получение первых символов строки в php)
- Php str replace (замена в строке php)
- слова php (слова в php (работа со строками))
- Php encode (кодирование строк в php (encode))
- Php первая заглавная (преобразование первой буквы в заглавную в php)
- Php str contains (проверка наличия подстроки в php)

Преобразование первой буквы в заглавную в PHP - comments

En
Php первая заглавная (php)