mb_convert_case

(PHP 4 >= 4.3.0, PHP 5)

mb_convert_case Производит смену регистра символов в строке

Описание

string mb_convert_case ( string $str , int $mode = MB_CASE_UPPER [, string $encoding = mb_internal_encoding() ] )

Производит смену регистра символов в строке string в соответствии с режимом mode.

Список параметров

str

Строка (string) для преобразования.

mode

Режим смены регистра. Это может быть одна из констант MB_CASE_UPPER, MB_CASE_LOWER или MB_CASE_TITLE.

encoding

Параметр encoding представляет собой символьную кодировку. Если он опущен, вместо него будет использовано значение внутренней кодировки.

Возвращаемые значения

Строка string преобразованная в соответствии с режимом mode.

Юникод

В отличие от стандартных функций смены регистра, вроде strtolower() и strtoupper(), смена регистра осуществляется на основе свойств символа Юникода. Таким образом, на поведение функции не влияют региональные настройки системы, и она может конвертировать любые символы, имеющие 'алфавитное' свойство, как например А-умляут (Ä).

Дополнительную информацию о свойствах Юникода смотрите по ссылке» http://www.unicode.org/unicode/reports/tr21/.

Примеры

Пример #1 Пример использования mb_convert_case()

<?php
$str 
"у мэри был маленький ягненок и она его очень любила";
$str mb_convert_case($strMB_CASE_UPPER"UTF-8");
echo 
$str// Выведет У МЭРИ БЫЛ МАЛЕНЬКИЙ ЯГНЕНОК И ОНА ЕГО ОЧЕНЬ ЛЮБИЛА
$str mb_convert_case($strMB_CASE_TITLE"UTF-8");
echo 
$str// Выведет У Мэри Был Маленький Ягненок И Она Его Очень Любила
?>

Пример #2 Пример использования mb_convert_case() с нелатинским UTF-8 текстом

<?php
$str 
"Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός";
$str mb_convert_case($strMB_CASE_UPPER"UTF-8");
echo 
$str// Выведет ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ, ΔΡΑΣΚΕΛΊΖΕΙ ΥΠΈΡ ΝΩΘΡΟΎ ΚΥΝΌΣ
$str mb_convert_case($strMB_CASE_TITLE"UTF-8");
echo 
$str// Выведет Τάχιστη Αλώπηξ Βαφήσ Ψημένη Γη, Δρασκελίζει Υπέρ Νωθρού Κυνόσ
?>

Смотрите также

  • mb_strtolower() - Приведение строки к нижнему регистру
  • mb_strtoupper() - Приведение строки к верхнему регистру
  • strtolower() - Преобразует строку в нижний регистр
  • strtoupper() - Преобразует строку в верхний регистр
  • ucfirst() - Преобразует первый символ строки в верхний регистр
  • ucwords() - Преобразует в верхний регистр первый символ каждого слова в строке

Коментарии

For CZECH characters:
<?php
$text 
mb_convert_case($textMB_CASE_LOWER"Windows-1251");
?>
The right encoding Windows-1250 is not valid (see the list mb_list_encodings), but Windows-1251 will do the same 100%. The function strtolower() ignores czech characters with diacritics.
2005-04-30 04:36:54
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html
For my case following did the work to capitalize UTF-8 encoded string. 

function capitalize($str, $encoding = 'UTF-8') {
    return mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding) . mb_strtolower(mb_substr($str, 1, mb_strlen($str), $encoding), $encoding);
}
2008-07-04 02:57:00
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html
Building upon Justin's and Alex's work... 

This function allows you to specify which delimiter(s) to explode on (not just the default space). Now you can correctly capitalize Irish names and hyphenated words (if you want)!

<?php
function titleCase($string$delimiters = array(" ""-""O'"), $exceptions = array("to""a""the""of""by""and""with""II""III""IV""V""VI""VII""VIII""IX""X")) {
       
/*
        * Exceptions in lower case are words you don't want converted
        * Exceptions all in upper case are any words you don't want converted to title case
        *   but should be converted to upper case, e.g.:
        *   king henry viii or king henry Viii should be King Henry VIII
        */
       
foreach ($delimiters as $delimiter){
               
$words explode($delimiter$string);
               
$newwords = array();
               foreach (
$words as $word){
                       if (
in_array(strtoupper($word), $exceptions)){
                               
// check exceptions list for any words that should be in upper case
                               
$word strtoupper($word);
                       } elseif (!
in_array($word$exceptions)){
                               
// convert to uppercase
                               
$word ucfirst($word);
                       }
                       
array_push($newwords$word);
               }
               
$string join($delimiter$newwords);
       }
       return 
$string;
}
?>
2009-04-08 13:03:40
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html
as the previouly posted version of this function doesn't handle UTF-8 characters, I simply tried to replace ucfirst to mb_convert_case, but then any previous case foldings were lost while looping through delimiters. 
So I decided to do an mb_convert_case on the input string (it also deals with words is uppercase wich may also be problematic when doing case-sensitive search), and do the rest of checking after that.

As with mb_convert_case, words are capitalized, I also added lowercase convertion for the exceptions, but, for the above mentioned reason, I left ucfirst unchanged.

Now it works fine for utf-8 strings as well, except for string delimiters followed by an UTF-8 character ("Mcádám" is unchanged, while "mcdunno's" is converted to "McDunno's" and "ökrös-TÓTH éDUa" in also put in the correct form)

I use it for checking user input on names and addresses, so exceptions list contains some hungarian words too.

<?php

function titleCase($string$delimiters = array(" ""-"".""'""O'""Mc"), $exceptions = array("út""u""s""és""utca""tér""krt""körút""sétány""I""II""III""IV""V""VI""VII""VIII""IX""X""XI""XII""XIII""XIV""XV""XVI""XVII""XVIII""XIX""XX""XXI""XXII""XXIII""XXIV""XXV""XXVI""XXVII""XXVIII""XXIX""XXX" )) {
       
/*
        * Exceptions in lower case are words you don't want converted
        * Exceptions all in upper case are any words you don't want converted to title case
        *   but should be converted to upper case, e.g.:
        *   king henry viii or king henry Viii should be King Henry VIII
        */
       
$string mb_convert_case($stringMB_CASE_TITLE"UTF-8");

       foreach (
$delimiters as $dlnr => $delimiter){
               
$words explode($delimiter$string);
               
$newwords = array();
               foreach (
$words as $wordnr => $word){
               
                       if (
in_array(mb_strtoupper($word"UTF-8"), $exceptions)){
                               
// check exceptions list for any words that should be in upper case
                               
$word mb_strtoupper($word"UTF-8");
                       }
                       elseif (
in_array(mb_strtolower($word"UTF-8"), $exceptions)){
                               
// check exceptions list for any words that should be in upper case
                               
$word mb_strtolower($word"UTF-8");
                       }
                       
                       elseif (!
in_array($word$exceptions) ){
                               
// convert to uppercase (non-utf8 only)
                             
                               
$word ucfirst($word);
                               
                       }
                       
array_push($newwords$word);
               }
               
$string join($delimiter$newwords);
       }
//foreach
       
return $string;


?>
2009-07-19 06:27:41
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html
This is a variation of mb_convert_case that works only for UTF-8 strings and that will not convert to lowercase anything.

This avoids turning "AAA aaa" into "Aaa Aaa"; it maps "AAA aaa" into ""AAA Aaa" instead.

<?php
function mb_convert_case_utf8_variation($s) {
   
$arr preg_split("//u"$s, -1PREG_SPLIT_NO_EMPTY);
   
$result "";
   
$mode false;
    foreach (
$arr as $char) {
       
$res preg_match(
           
'/\\p{Mn}|\\p{Me}|\\p{Cf}|\\p{Lm}|\\p{Sk}|\\p{Lu}|\\p{Ll}|'.
           
'\\p{Lt}|\\p{Sk}|\\p{Cs}/u'$char) == 1;
        if (
$mode) {
            if (!
$res)
               
$mode false;
        }
        elseif (
$res) {
           
$mode true;
           
$char mb_convert_case($charMB_CASE_TITLE"UTF-8");
        }
       
$result .= $char;
    }

    return 
$result;
}
?>
2010-07-26 14:06:15
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html
Автор:
MB_CASE_TITLE doesn't change letters in quotation marks.

Example:
mb_convert_case('AAA "aaa"', MB_CASE_TITLE); 
// Result: Aaa "aaa"
2016-07-20 15:51:16
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html
for turkish language I => i  and i => I conversion is a problem. It must be I => ı and i => İ so my simple solution is

    public function title_case_turkish($str){

 
        $str = str_replace("i", "İ", $str);
        $str = str_replace("I", "ı", $str);

        $str = mb_convert_case($str, MB_CASE_TITLE,"UTF-8");

        return $str;

    }
2018-03-18 11:32:16
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html
for turkish simple:

$str = mb_convert_case(str_replace(['i','I'], ['İ','ı'], $str), MB_CASE_TITLE,"UTF-8");
2018-03-24 10:46:03
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html
Автор:
You can use this function to fix problems related to Turkish "ı", "I", "i", "İ" characters. This function also replaces the weird "i̇" character with regular "i" character ("i̇ => i").

function mb_convert_case_tr($str, $type, $encoding = "UTF-8")
{

  switch ($type) {
    case "u":
    case "upper":
    case MB_CASE_UPPER:
      $type = MB_CASE_UPPER;
      break;
    case "l":
    case "lower":
    case MB_CASE_LOWER:
      $type = MB_CASE_LOWER;
      break;
    case "t":
    case "title":
    case MB_CASE_TITLE:
      $type = MB_CASE_TITLE;
      break;
  }

  $str = str_replace("i", "İ", $str);
  $str = str_replace("I", "ı", $str);

  $str = mb_convert_case($str, $type, $encoding);
  $str = str_replace("i̇", "i", $str);

  return $str;
}
2020-03-05 22:29:38
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html
Автор:
$str = "Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός";
$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
this convertation does not give the example that you already post 
but this one

$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
"ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ, ΔΡΑΣΚΕΛΊΖΕΙ ΥΠΈΡ ΝΩΘΡΟΎ ΚΥΝΌΣ"
2021-12-05 13:04:13
http://php5.kiev.ua/manual/ru/function.mb-convert-case.html

    Поддержать сайт на родительском проекте КГБ