Php первая буква заглавная utf 8

Php первая буква заглавная utf 8

Вступление

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

Кириллица и юникод — вечная проблема всех версий PHP, частично проблема решена, существует функция string mb_convert_case (string str, int mode [, string encoding]) , которая принимает в качестве параметров строку, режим преобразования (0 — все буквы в верхний регистр, 1 — все буквы в нижний регистр, 2 — ВСЕ ПЕРВЫЕ буквы всех слов в верхний регистр) и кодировка.

Преобразование букв

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

Английские буквы

С английскими буквами в стандартно-используемых кодировках (UTF-8 и Windows-1251) проблем не возникает.

Результат на экране
First letters
First Letters

Кириллица и Windows-1251

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

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

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

С кириллицей в юникоде функции ucfirst() и ucwords() не справятся и преобразований не произойдет.

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

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

Если строка начинается с этой буквы, то с помощью функции mb_icfirst() вот так:

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

В этом случае необходимо регулярное выражение, такое:

Как правильно и коротко привести к верхнему регистру первую букву в русском UTF-8 тексте в PHP?

6 ответов 6

Я пользуюсь ucfirst. Товарищ ROOT дал ссылку на документацию.

Так же добавлю — примитивный способ)))

Читайте также:  Marvel spider man database

Отличается от ответа he11d0g тем, что в mb_substr передается длина строки (при передаче null не работает с кодировкой cp1251 на php5.3)

Защищён участником Дух сообщества ♦ 12 янв ’17 в 10:10 .

Благодарим вас за интерес, проявленный к этому вопросу. Так как он собрал большое количество ответов низкого качества и спама, который пришлось удалить, для публикации ответов теперь необходимо иметь 10 баллов репутации на сайте (бонус за ассоциацию учётных записей не учитывается).

Может быть, вы захотите ответить на один из неотвеченных вопросов?

Ссылка на основную публикацию
Adblock detector