Справочники, инструменты, документация

PHP: Сделать первую букву заглавной

Задача: преобразовать первую букву в строке и все первые буквы во всех словах в строке.

В 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

С кириллицей в Windows-1251 проблем так же не должно возникнуть.

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

// Результат на экране
// Первые буквы
// Первые Буквы

Кириллица и UTF-8

С кириллицей в юникоде функции 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 сделать все буквы заглавными

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);
//выведет - КАЖДЫЙ ОХОТНИК ЖЕЛАЕТ ЗНАТЬ...