Привести первый символ строки к верхнему регистру php

Функция ucfirst() — стандартный способ

В PHP задача привести первый символ строки к верхнему регистру решается встроенной функцией ucfirst(). Функция принимает строку и возвращает её копию, в которой первый символ переведён в верхний регистр, а остальные символы остаются без изменений.

Синтаксис прост и понятен. Однако у ucfirst() есть существенное ограничение, с которым сталкиваются все, кто работает с русскоязычным контентом.

Проблема: ucfirst не работает с кириллицей

Функция ucfirst() — однобайтовая. Она корректно работает только с однобайтовыми кодировками (ASCII, Latin-1) и не понимает многобайтовые символы UTF-8. Кириллические символы в UTF-8 занимают 2 байта, поэтому ucfirst() «видит» только первый байт и некорректно обрабатывает строку.

Это распространённая проблема, с которой сталкиваются разработчики при работе с русскими строками в PHP. Стандартное решение — использовать многобайтовые строковые функции из расширения mbstring.

Решение для UTF-8 и кириллицы через mb_strtoupper и mb_substr

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

Разберём работу функции:

  • mb_substr($str, 0, 1, $encoding) — извлекает первый символ строки с учётом кодировки
  • mb_strtoupper(…, $encoding) — переводит символ в верхний регистр с учётом кодировки
  • mb_substr($str, 1, null, $encoding) — извлекает все символы начиная со второго
  • Конкатенация объединяет заглавный первый символ с остатком строки

Функция lcfirst() — сделать первый символ строчным

Обратная задача — сделать первый символ строки строчным — решается функцией lcfirst(). Она также однобайтовая и не работает с кириллицей напрямую.

Функция ucwords() — каждое слово с заглавной буквы

Функция ucwords() переводит первый символ каждого слова в верхний регистр. Слова разделяются пробелом, табуляцией, переводом строки и другими пробельными символами. Как и ucfirst, она не работает с кириллицей без дополнительной обработки.

Кастомная функция для UTF-8 с поддержкой разных кодировок

На практике удобнее иметь одну универсальную функцию, которая корректно обрабатывает строки в любой кодировке и не требует каждый раз указывать параметры явно:

Использование в шаблонах Bitrix и MODX

В шаблонах CMS функция mb_ucfirst часто нужна для форматирования заголовков, имён пользователей и названий категорий. Для Bitrix24 и 1С-Битрикс:

Для MODX Revolution в сниппетах:

Итог: для работы с кириллицей функция ucfirst первый символ верхний регистр php в стандартном виде не подходит. Используйте комбинацию mb_strtoupper + mb_substr или напишите вспомогательную функцию mb_ucfirst, которую можно переиспользовать во всём проекте. Убедитесь, что расширение mbstring включено в вашем PHP (в большинстве хостингов оно активно по умолчанию).