Під час розробки чергового WordPress плагіна, мені знадобився аналог PHP-функції ucfirst, але в інтерпретації mb_* (тобто для багатобайтових рядків). Зайшовши на php.net, я був здивований — такої функції не існує. Проглянувши інтернет, на Stack Overflow було знайдено одне (а можливо й два) рішення.
Доопрацювавши знайдений код, вийшов наступний результат:
public function mb_ucfirst($string, $encoding = 'UTF-8')
{
$strlen = mb_strlen($string, $encoding);
$first_char = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, $strlen - 1, $encoding);
return mb_strtoupper($first_char, $encoding) . mb_strtolower($then, $encoding);
}Де:
$strlen — загальна довжина рядка з урахуванням кодування (другий параметр нашої функції)
$first_char — перший символ рядка
$then — всі інші символи (тобто крім першого)
І завершується все оператором return, який перетворює перший символ у верхній регістр, а всі інші — у нижній, з урахуванням вказаного кодування.
