normal ucfirst fonksiyonu türkçe karakterlere hiç dokunmaz, ufak bi ilaveyle türkçe karakterlere de duyarlı ucfirst fonksiyonu oluşturdum.

<?php

function uc_first($str){
   $str[0] = strtr($str, 
   "abcdefghıijklmnopqrstuvwxyz".
   "\x9C\x9A\xE0\xE1\xE2\xE3".
   "\xE4\xE5\xE6\xE7\xE8\xE9".
   "\xEA\xEB\xEC\xED\xEE\xEF".
   "\xF0\xF1\xF2\xF3\xF4\xF5".
   "\xF6\xF8\xF9\xFA\xFB\xFC".
   "\xFE\xFF", 
   "ABCDEFGHIİJKLMNOPQRSTUVWXYZ".
   "\x8C\x8A\xC0\xC1\xC2\xC3\xC4".
   "\xC5\xC6\xC7\xC8\xC9\xCA\xCB".
   "\xCC\xCD\xCE\xCF\xD0\xD1\xD2".
   "\xD3\xD4\xD5\xD6\xD8\xD9\xDA".
   "\xDB\xDC\xDE\x9F");
   return $str;
}

?>
Not: bu ufak kodu php.net sitesinden buldum(türkçe için değildi çalışmıyordu tr karakterlerle) ve editleyip oraya gönderdim ve onaylandı(havamıda atayım :P )
http://tr.php.net/manual/en/function.ucfirst.php