Documentation on mb_convert_case

mb_convert_case = Perform case folding on a string

Performs case folding on a string, converted in the way specified by mode.

str The string being converted. mode The mode of the conversion. It can be one of MB_CASE_UPPER, MB_CASE_LOWER, or MB_CASE_TITLE. encoding The encoding parameter is the character encoding. If it is omitted, the internal character encoding value will be used.

Usage, params, and more on mb_convert_case

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

str The string being converted. mode The mode of the conversion. It can be one of MB_CASE_UPPER, MB_CASE_LOWER, or MB_CASE_TITLE. encoding The encoding parameter is the character encoding. If it is omitted, the internal character encoding value will be used.

A case folded version of string converted in the way specified by mode.

Notes and warnings on mb_convert_case

Basic example of how to use: mb_convert_case

Example #1 mb_convert_case() example

<?php
$str 
"mary had a Little lamb and she loved it so";
$str mb_convert_case($strMB_CASE_UPPER"UTF-8");
echo 
$str// Prints MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
$str mb_convert_case($strMB_CASE_TITLE"UTF-8");
echo 
$str// Prints Mary Had A Little Lamb And She Loved It So
?>

Example #2 mb_convert_case() example with non-Latin UTF-8 text

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

Other code examples of mb_convert_case being used

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;
}

?>