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

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

 mb_strtolower($a,"utf8");

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

Ответы [ 7 ]

102 голосов
/ 25 марта 2010

Нет функции 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;
}
62 голосов
/ 22 августа 2012

Это более краткое решение, хотя оно довольно похоже на ucwords функцию:

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

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

17 голосов
/ 04 января 2013
function mb_ucfirst($string)
{
    return mb_strtoupper(mb_substr($string, 0, 1)).mb_strtolower(mb_substr($string, 1));
}
8 голосов
/ 12 мая 2015
if (!function_exists('mb_ucfirst'))
{
    function mb_ucfirst($value)
    {
        return mb_strtoupper(mb_substr($value, 0, 1)) . mb_substr($value, 1);
    }
}
2 голосов
/ 02 апреля 2012

Я использую 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 );
}
0 голосов
/ 21 мая 2019
$string = trim(preg_replace('/\s+/', ' ', $string));
$string_ar = explode(' ', mb_strtolower($string,'utf-8'));

foreach($string_ar as $key => $value {
  $string_str .= mb_convert_case(mb_substr(trim($value), 0, 1), MB_CASE_TITLE, 'utf-8')
    . mb_substr(trim($value),1)
    . ' ';
}

$string = trim($string_str);
0 голосов
/ 12 февраля 2014
/*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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...