В PHP есть функция ucfirst()
, которая первую букву в строке делает заглавной, ucwords()
— делает заглавными буквы во всех словах строки, в работе с кириллицей, в юникоде, возникают проблемы.
Кириллица и юникод — вечная проблема всех версий PHP, частично проблема решена, существует функция string mb_convert_case (string str, int mode [, string encoding])
, которая принимает в качестве параметров строку, режим преобразования (0 — все буквы в верхний регистр, 1 — все буквы в нижний регистр, 2 — ВСЕ ПЕРВЫЕ буквы всех слов в верхний регистр) и кодировка.
С английскими буквами в стандартно-используемых кодировках (UTF-8 и Windows-1251) проблем не возникает.
$str = 'first letters'; // строка
echo ucfirst($str) . '<br>'; // первая буква в верхний регистр
echo ucwords($str); // первая буква во всех словах
// Результат на экране
// First letters
// First Letters
С кириллицей в Windows-1251 проблем так же не должно возникнуть.
$str = 'первые буквы'; // строка
echo ucfirst($str) . '<br>'; // первая буква в верхний регистр
echo ucwords($str); // первая буква во всех словах
// Результат на экране
// Первые буквы
// Первые Буквы
С кириллицей в юникоде функции ucfirst()
и ucwords()
не справятся и преобразований не произойдет. Для этого определяется функция mb_ucfirst(string str [, string encoding])
, которая будет обрабатывать юникод-строки.
// проверяем, что функция mb_ucfirst не объявлена и включено расширение mbstring (Multibyte String Functions)
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) . '<br>';
// пробуем кириллицу в юникоде преобразовать функцией ucwords
echo ucwords($str) . '<br>';
// обрабатываем объявленной функцией mb_ucfirst()
echo mb_ucfirst($str) . '<br>';
// преобразовываем функцией mb_convert_case
echo mb_convert_case($str, MB_CASE_TITLE, 'UTF-8');
// Результат на экране
// первые буквы
// первые буквы
// Первые буквы
// Первые Буквы
PHP обладает целым арсеналом работы со строками. Сделать буквы заглавными или наоборот перевести в строчные — нет ничего проще. Базовый набор функций для работы со строками содержит такие функции как:
string strtolower (string $string);
— переводит строку $string в нижний регистр,string strtoupper (string $string);
— переводит строку $string в верхний регистр, т.е все буквы становятся заглавными.Но эти функции не работают с юникодом. Для работы с юникодом требуется «дублеры» из библиотеки PHP Multibyte Strings.
string mb_strtolower (string $string [, string $encoding = mb_internal_encoding() ]);
— переводит строку в юникоде в нижний регистр,string mb_strtoupper (string $string [, string $encoding = mb_internal_encoding() ]);
— переводит строку в юникоде в верхний регистр, т.е. делает заглавными.Дублеры позволяют указывать вторым параметром функции название кодировки, которая должна быть использована. Примеры использования:
$str = 'Каждый охотник желает знать...';
echo mb_strtoupper($str);
//выведет - КАЖДЫЙ ОХОТНИК ЖЕЛАЕТ ЗНАТЬ...