mb_convert_case

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

mb_convert_caseBir dizgeye büyük-küçük harf dönüşümü uygular

Açıklama

mb_convert_case(string $dizge, int $kip, ?string $kodlama = null): string

Belirtilen dizgeye belirtilen kipe göre büyük-küçük harf dönüşümü uygular.

Bağımsız Değişkenler

dizge

Dönüştürülecek dizge.

kip

Dönüşüm kipi. MB_CASE_UPPER, MB_CASE_LOWER, MB_CASE_TITLE, MB_CASE_FOLD, MB_CASE_UPPER_SIMPLE, MB_CASE_LOWER_SIMPLE, MB_CASE_TITLE_SIMPLE, MB_CASE_FOLD_SIMPLE sabitlerinden biri olabilir.

kodlama

kodlama bağımsız değişkeninde karakter kodlaması belirtilir. Belirtilmediği takdirde veya null ise dahili karakter kodlaması kullanılır.

Dönen Değerler

kip ile belirtilen şekilde büyük-küçük harf dönüşümü yapılmış dizge.

Sürüm Bilgisi

Sürüm: Açıklama
7.3.0 kip artık MB_CASE_FOLD, MB_CASE_UPPER_SIMPLE, MB_CASE_LOWER_SIMPLE, MB_CASE_TITLE_SIMPLE ve MB_CASE_FOLD_SIMPLE sabitlerini de destekliyor.

Örnekler

Örnek 1 - mb_convert_case() yerel ayarlara bakmaz

<?php
$str
= "Pınar'ın çok sevdiği küçük bir kuzusu var.\n";
$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
echo
$str; // PINAR'IN ÇOK SEVDIĞI KÜÇÜK BIR KUZUSU VAR.
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
echo
$str; // Pinar'in Çok Sevdiği Küçük Bir Kuzusu Var.
?>

Örnek 2 - Latin harfleri kullanılmayan mb_convert_case() örneği

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

Evrenkod

strtolower() ve strtoupper() gibi standart büyük-küçük harf dönüşüm işlevlerinden farklı olarak, dönüşümü Unicode karakter özelliklerine göre yapar. Bu bakımdan bu işlevin davranışı yerel ayarlardan etkilenmez ve büyük-küçük harf ayrımı yapılabilen her karakteri dönüştürebilir.

Unicode özellikleri hakkında daha fazla bilgi için » http://www.unicode.org/reports/tr21/ adresine bakınız.

Ayrıca Bakınız

add a note add a note

User Contributed Notes 10 notes

up
9
alNzy
4 years ago
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;
}
up
11
agash at freemail dot hu
15 years ago
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($string, MB_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;
}

?>
up
5
Rasa Ravi at tantrajoga dot cz
19 years ago
For CZECH characters:
<?php
$text
= mb_convert_case($text, MB_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.
up
3
dave at wp dot pl
8 years ago
MB_CASE_TITLE doesn't change letters in quotation marks.

Example:
mb_convert_case('AAA "aaa"', MB_CASE_TITLE);
// Result: Aaa "aaa"
up
3
info at yasarnet dot com
16 years ago
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);
}
up
1
the at psychoticneurotic dot com
15 years ago
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;
}
?>
up
0
tavhane at gmail dot com
6 years ago
for turkish simple:

$str = mb_convert_case(str_replace(['i','I'], ['İ','ı'], $str), MB_CASE_TITLE,"UTF-8");
up
-1
Anonymous
2 years ago
$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");
"ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ, ΔΡΑΣΚΕΛΊΖΕΙ ΥΠΈΡ ΝΩΘΡΟΎ ΚΥΝΌΣ"
up
-3
webenformasyon at gmail dot com
6 years ago
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;

    }
up
-7
cataphract at php dot net
14 years ago
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, -1, PREG_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($char, MB_CASE_TITLE, "UTF-8");
        }
       
$result .= $char;
    }

    return
$result;
}
?>
To Top