Php первую букву в верхний регистр. Как сделать первую букву заглавной php кирилица

Достаточно редко, но всё-же возникает такая необходимость, как сделать первую букву заглавной php кирилица.

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

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

Тут всё достаточно просто: в PHP есть 2 функции: ucfirst() и ucwords(). Первая делает только первую букву в строке заглавной, вторая делает первую букву каждого слова в строке заглавной.

// строка $str = "first letters"; // первая буква в верхний регистр echo ucfirst($str) . "


First letters
и
First Letters

Видим разницу. С английскими текстами (или любыми другими), написанными латиницей проблем не будет.

Как сделать первую букву заглавной php кирилица Windows-1251 (CP-1251)

С кирилицей (русскими буквами) которые записаны в кодировки Windows-1251 тоже не будет больших проблем:

// строка $str = "первые буквы"; // первая буква в верхний регистр echo ucfirst($str) . "
"; // первая буква во всех словах echo ucwords($str);

В результате получим две строки:
Первые буквы
и
Первые Буквы

Как сделать первую букву заглавной php кирилица UTF-8

Но как только дело доходит до UTF-8 начинаются проблемы, потому, что кирилица в UTF-8 занимает 2 байта, и поэтому ничего не получится. Для этого будем использовать «костыль» от Multibyte String Functions. Если этот плагин установлен на PHP, то можно просто использовать 2 аналогичные функции: mb_ucfirst и mb_convert_case.

А если их нет, то нужно дополнить код своими альтернативами:

If (!function_exists("mb_ucfirst") && extension_loaded("mbstring")) { /** * mb_ucfirst - преобразует первый символ в верхний регистр * @param string $str - строка * @param string $encoding - кодировка, по-умолчанию UTF-8 * @return string */ function mb_ucfirst($str, $encoding="UTF-8") { $str = mb_ereg_replace("^[\ ]+", "", $str); $str = mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding). mb_substr($str, 1, mb_strlen($str), $encoding); return $str; } } $str = "первые буквы"; // пробуем кириллицу в юникоде преобразовать функцией ucfirst echo ucfirst($str) . "
"; // пробуем кириллицу в юникоде преобразовать функцией ucwords echo ucwords($str) . "
"; // обрабатываем объявленной функцией mb_ucfirst() echo mb_ucfirst($str) . "
"; // преобразовываем функцией mb_convert_case echo mb_convert_case($str, MB_CASE_TITLE, "UTF-8");

Результатом этому коду станут такие строчки.

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

Я не зря упомянул про кодировку, потому что в PHP есть встроенная функция, чтобы , это ucfirst() . Но она нам не подходит, т.к. работает только с латинскими символами. Т.е. если вы с помощью такой функции попробуете поднять первую букву в слове «home», то всё будет в порядке и на выходе вы получите «Home». А если сделать то же самое со словом «дом», то на выходе как был «дом» с маленькой буквой, так и останется. Это происходит потому, что мы используем русские символы в кодировке UTF-8, т.е. многобайтовой, а ucfirst() используется для однобайтовых кодировок.

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

Функция, которая делает первую букву заглавной /** * Uppercase first letter. Working with multi-byte encodings. * * @param $str * @param string $encoding * @return string */ function upFirstLetter($str, $encoding = "UTF-8") { return mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding) . mb_substr($str, 1, null, $encoding); } echo upFirstLetter("дом"); // выведет "Дом"

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

Например, ucfirst - функция, которая преобразовывает первый символ строки в верхний регистр. Казалось бы, не должно возникнуть никаких проблем, но при работе с кириллицей такого преобразования не происходит. Это касается и функции ucwords - преобразует в верхний регистр первый символ каждого слова в строке.

С символами анг.алфавита проблем не возникает:

Test string Test String

Но с кириллицей возникают проблемы:

Тестовая строка тестовая строка

Для PHP типичны случаи, когда функции "плохо" или вообще не работают с кириллицей. Некоторые функции с приставкой mb решают проблемы с кириллицей. Например, mb_strtolower - приведение строки к нижнему регистру. В отличие от strtolower(), то что символ является буквой определяется на основании свойств символа Юникода.

Для решения проблемы определим функцию mb_ucfirst(string str [, string encoding]), которая будет обрабатывать символы Юникода.