Почему "ucfirst()" не работает для русских символов?

1,00
р.
Здравствуйте! У меня часто возникают проблемы с кодировками, в частности с отображением русских символов во всех более-менее современных браузерах. Вот еще один вопрос возник: Почему PHP-функция "ucfirst()" не работает для русских символов? Как можно "заставить" её работать? Или есть хотя бы альтернатива?
P.S Только банальщину с заменой букв по массиву предлагать не стоит.
Спасибо всем, кто откликнулся!


Ответ
UTF-8, разумеется? PHP не может нормально работать с многобайтными кодировками. Наиболее близкое решение:
mb_internal_encoding("UTF-8") function mb_ucfirst($text) { return mb_strtoupper(mb_substr($text, 0, 1)) . mb_substr($text, 1) } echo mb_ucfirst("тест
")
На всякий случай, дополню: если вы до сих пор кипятите^W используете CP1251 или, упаси Его Макароннейшество, KOI8-R, то может помочь вызов setlocale, с однобайтными кодировками ucfirst кое-как работает:
setlocale(LC_CTYPE, "ru_RU.CP1251") echo ucfirst("\xf2\xe5\xf1\xf2
")
Но работать это будет только в случае, если в системе есть такая локаль. Т.е. как повезет.