Первая буква в верхний регистр

Опубликовано 2013.02.12

В css есть замечательное свойство - text-transform, которое может иметь ряд значений, а именно: capitalize, lowercase, uppercase, none и inherit. Этими свойствами можно сделать заглавными первые буквы каждого слова, перевести в верхний регистр все символы, перевести в нижний, ничего не делать и взять значение от родителя. Но ни одно значение этого свойства не может сделать заглавной только одну первую букву строки. Разве что capitalize, которое сделает заглавной каждую букву каждого слова, что не всегда удобно. Обойти это можно средствами PHP при помощи такой вот функции:
  1. function first_letter_up($string, $coding='utf-8') {
  2. if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($string)) {
  3. preg_match('/(.)/us', mb_strtoupper(mb_strtolower($string, $coding), $coding), $matches);
  4. $string = $matches[1] . mb_substr($string, 1, mb_strlen($string, $coding), $coding);
  5. }
  6. else {
  7. $string = ucfirst($string);
  8. }
  9. return $string;
  10. }
Теперь, имея такую строку "джумла для слабаков" и обработав её функцией first_letter_up получим "Джумла для слабаков"
  1. $string = 'джумла для слабаков';
  2. echo first_letter_up($string); // Джумла для слабаков
Не стоит также забывать о функции ucfirst, если ваш текст на английском языке - всё прокатит без всевозможных собственных функций. Например:
  1. echo ucfirst('english');//выдаст English
  2. echo ucfirst('русский');//выдаст русский
Есть ещё такой способ:
  1. echo mb_convert_case('строка', MB_CASE_TITLE, 'UTF-8');//выдаст Строка
Или можно использовать такую функцию:
  1. function mb_ucfirst($text) {
  2. return mb_strtoupper(mb_substr($text, 0, 1)) . mb_substr($text, 1);
  3. }
  4. echo mb_ucfirst("русские символы");//выдаст Русские символы
Если у вас выводятся крикозябры - попробуйте в начале скрипта добавить
  1. header('Content-Type: text/html; charset=utf-8');