Версия php 5.2.8.
Для работоспособности приведённого способа надо собрать php с поддержкой Multibyte String (флаг nls в Gentoo, параметр –enable-mbstring при ручной сборке). А дальше заменяем функцию ucfirst на следующую конструкцию:
$string = mb_strtoupper(mb_substr($string, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($string, 1, mb_strlen($string), 'UTF-8');
Источник: Функция ucfirst в PHP и кирилица в кодировке UTF-8
Дискуссия
Есть более простой способ получения первой заглавной буквы для данного решения:
$string = mb_convert_case($string, MB_CASE_TITLE);Да, ну? Тестируйте, прежде чем писать.
Прямой путь всегда лучше велосипедного, Анвар просто забыл уточнить кодировку mb_convert_case($string, MB_CASE_TITLE, 'UTF-8');
Не совсем это правильный путь, поскольку будут изменяться регистры сразу всех слов в $string:
mb_convert_case('привет, мир') → 'Привет, Мир'.
Это зачастую далеко не совсем то, что надо. А для замены только первой буквы первого слова этот путь избыточен.