Решение: как сделать первую букву заглавной в UTF-8
В PHP есть функция ucfirst()
для капитализации первого слова строки (делает первую букву заглавной). Но она не работает с многобайтными строками (например, в кодировке UTF-8). Есть функции работы с многобайтными строками, названия которых начинаются с mb_
(multi byte). Но среди них нет функции mb_ucfirst()
, которую мы сейчас напишем.
Нам понадобится функция mb_strtoupper()
(делает все буквы строки заглавными) и mb_substr()
(возвращает часть строки). Эти функции в PHP уже есть — если установлено расширение PHP mbstring (почти всегда установлено). Если же нет, наша функция вернёт исходную строку без изменений.
Принцип прост. Возьмём от строки первую букву, сделаем её заглавной и присоединим к ней остальную часть строки:
# Делает первую букву строки заглавной (капитализация первого слова) if ( ! function_exists( 'mb_ucfirst' ) ) { function mb_ucfirst( $s, $e = 'UTF-8' ) { if ( ! function_exists( 'mb_substr' ) ) return $s; $first = mb_substr( $s, 0, 1, $e ); $second = mb_substr( $s, 1, mb_strlen( $s, $e ) -1, $e ); return mb_strtoupper( $first, $e ) . $second; } }
Достаточно добавить этот PHP-код в ваш скрипт, и вы сможете использовать функцию echo mb_ucfirst( 'например, так' )
— в результате выведется текст «Например, так». Даже если когда-нибудь в PHP добавят функцию «mb_ucfirst», ошибки не будет, потому что мы объявляем нашу функцию только при наличии её отсутствия.
Если не указана кодировка, по умолчанию имеется ввиду UTF-8. Вы можете использовать функцию с явным указанием кодировки, если она у вас отлична от UTF-8: mb_ucfirst( 'строка', 'KOI8-R' )
8 Responses