Нормальный вариант:
function mb_ucfirst($string)
{
$first = mb_substr($string, 0, 1, 'UTF-8');
$later = mb_substr($string, 1, null, 'UTF-8');
return mb_strtoupper($first, 'UTF-8').$later;
}
Вариант не очень (бывают проблемы с кодировкой):
function mb_ucfirst($string)
{
$first = mb_strtoupper($string[0], 'UTF-8');
$string = str_replace($string[0], $first, $string);
return $string;
}