Функция ucfirst () для многобайтовых кодировок символов

Я спросил о функции strtolower . Но при использовании иностранных символов он не преобразует их в верхний регистр, поэтому я должен использовать:

  mb_strtolower($a,"utf8"); 

Но что я могу сделать, если я хочу использовать ucfirst() ? Я не нашел никакой подобной функции, где я могу установить тип кодировки.

Solutions Collecting From Web of "Функция ucfirst () для многобайтовых кодировок символов"

Нет функции mb_ucfirst , как вы уже заметили. Вы можете подделать mb_ucfirst с двумя mb_substr :

 function mb_ucfirst($string, $encoding) { $strlen = mb_strlen($string, $encoding); $firstChar = mb_substr($string, 0, 1, $encoding); $then = mb_substr($string, 1, $strlen - 1, $encoding); return mb_strtoupper($firstChar, $encoding) . $then; } 

Извините меня за некропостинг! Скорее, это не так интересно OP, но, возможно, это будет интересно другим. Это более сжатое решение, хотя оно довольно похоже на функцию ucwords:

 $final_string = mb_convert_case($your_string, MB_CASE_TITLE, 'UTF-8'); 

Если вам нужно загладить строку, состоящую из одного слова, это лучшее решение.

 function mb_ucfirst($string) { return mb_strtoupper(mb_substr($string, 0, 1)).mb_strtolower(mb_substr($string, 1)); } 
 if (!function_exists('mb_ucfirst')) { function mb_ucfirst($value) { return mb_strtoupper(mb_substr($value, 0, 1)) . mb_substr($value, 1); } } 

Я использую cp1250 на веб-странице, а для Ú mb_ucfirst не работает, поэтому небольшое обновление:

  function mb_ucfirst($string) { $main_encoding = "cp1250"; $inner_encoding = "utf-8"; $string = iconv($main_encoding, $inner_encoding , $string ); $strlen = mb_strlen($string); $firstChar = mb_substr($string, 0, 1, $inner_encoding); $then = mb_substr($string, 1, $strlen - 1, $inner_encoding); return $string = iconv($inner_encoding, $main_encoding , mb_strtoupper($firstChar, $inner_encoding) . $then ); } 
 /*This worked correctly for me*/ function mb_ucfirst($string, $encoding='UTF-8') { $firstChar = mb_substr($string, 0, 1, $encoding); $then = mb_substr($string, 1, mb_strlen($string, $encoding)-1, $encoding); return mb_strtoupper($firstChar, $encoding) . $then; } 

Это самый короткий, который я могу выяснить … извлечь первое слово, применить MB_CASE_TITLE и заменить его оригиналом.

function mb_ucfirst($str=''){ $str2=explode(" ",$str); return str_replace($str2[0],mb_convert_case($str2[0], MB_CASE_TITLE, "UTF-8"),$str); }

Рабочая (модульная версия) версия для современного PHP:

 <?php function mb_ucfirst($value) { $firstLetter = mb_strtoupper(mb_substr($value, 0, 1, 'UTF-8'), 'UTF-8'); $otherLetters = mb_substr($value, 1, null, 'UTF-8'); return $firstLetter . $otherLetters; } echo mb_ucfirst('żółta źółć'); var_dump('Żółta źółć' === mb_ucfirst('żółta źółć')); 

Это функция:

 function FirstCharString($string){ $aString = explode(' ', $string); $sReturn = ''; foreach ($aString as $k=>$fString) { $sFirst = mb_strtoupper(mb_substr($fString, 0, 1)); $sMore = mb_strtolower(mb_substr($fString, 1)); $sReturn .= $sFirst.$sMore.' '; } return trim($sReturn); } 

Пойдите с этим помощником:

 $text = "ρασąŽUOlas ΔρασΥκελίζει niekπέΥąΥžuoρ kυνόσ"; $ucfirsted_text = mb_convert_case(mb_substr($text,0,1), MB_CASE_TITLE, "UTF-8").mb_substr($text,1); echo $ucfirsted_text; //will print you "ΡασąŽUOlas ΔρασΥκελίζει niekπέΥąΥžuoρ kυνόσ"