downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

mb_convert_encoding> <mb_check_encoding
[edit] Last updated: Fri, 25 May 2012

view this page in

mb_convert_case

(PHP 4 >= 4.3.0, PHP 5)

mb_convert_caseRealiza conversión a mayúsculas en un string

Descripción

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

Realiza una conversión a mayúsculas en un string, de acuerdo al parámetro mode.

Parámetros

str

El string que se va a convertir.

mode

Modo de conversión. Puede ser MB_CASE_UPPER, MB_CASE_LOWER, o MB_CASE_TITLE.

encoding

El parámetro encoding es la codificación de caracteres. Si es omitido, será usado el valor de la codificación de caracteres interna.

Valores devueltos

La versión convertida del string tal como se especificó en el parámetro mode.

Unicode

A diferencia de las funciones estándar de mayúsculas/minúsculas, como strtolower() o strtoupper(), la conversión se lleva a cabo según los fundamentos de las propiedades de los caracteres Unicode. De esta forma, esta función no se ve afectada por las locales, y puede convertir cualquier carácter que contenga la propiedad 'alfabética', como A-umlaut (Ä).

Para más información sobre las propiedades Unicode, por favor, revise » http://www.unicode.org/unicode/reports/tr21/.

Ejemplos

Ejemplo #1 Ejemplo de mb_convert_case()

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

Ejemplo #2 Ejemplo de mb_convert_case() contexto no latino en UTF-8

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

Ver también



mb_convert_encoding> <mb_check_encoding
[edit] Last updated: Fri, 25 May 2012
 
add a note add a note User Contributed Notes mb_convert_case
cataphract at php dot net 26-Jul-2010 11:06
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;
}
?>
agash at freemail dot hu 19-Jul-2009 03:27
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;
}

?>
the at psychoticneurotic dot com 08-Apr-2009 10:03
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;
}
?>
Justin 17-Dec-2008 08:42
Retouching Alex's example so it works:

function titleCase($string, $exceptions = array('to', 'a', 'the', 'of', 'by', 'and', 'with', 'UI', 'V','X')) {
   
        $words = explode(" ", $string);
        $newwords = array();
        foreach ($words as $word)
        {
            if (!in_array($word, $exceptions)) {

                $word = strtolower($word);
                $word = ucfirst($word);
            }
            array_push($newwords, $word);
        }
        return join(" ", $newwords);
    }       

It doesn't work for Irish names, etc. So keep that in mind.
info at yasarnet dot com 03-Jul-2008 11:57
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);
}
thomas underscore corthals at hotmail dot com 15-Aug-2006 03:30
If you want to capitalize the first letter of a multibyte string, you can use this function.

<?php
function capitalize($str, $encoding = null) {
    
$str = mb_strtoupper($str{0}, $encoding) . mb_substr($str, 1, null, $encoding);
     return
$str;
}
?>
alex at agileware dot net 06-Feb-2006 06:02
This function is a bit more flexible than using mb_convert_case with MB_CASE_TITLE, because it lets you add words whose case you don't want modified.

function title_case($string, $exceptions = array('to', 'a', 'the', 'of', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X')) {
    $words = split(" ", $string);
    $newwords = array();

    foreach ($words as $word)
    {
        if (!array_key_exists($word, $exceptions)) {
            $word = strtolower($word);
            $word = ucfirst($word);
        }
        array_push($newwords, $word);

    }

    return ucfirst(join(" ", $newwords));
}
footballkid4 at hotmail dot com 04-Feb-2006 08:59
This function will capitalize the first letter ( the same as using mb_convert_case with MB_CASE_TITLE flag, but when using a sentence, it'll only capitalize the first word )

<?php
function capitalize(&$input) {
    
$input = strtoupper( substr( $input , 0 , 1 ) ).strtolower( substr( $input , 1 ) );
     return
$input;
}
?>

Very short, uses substr, strtoupper, and strtoupper only
Rasa Ravi at tantrajoga dot cz 30-Apr-2005 01:36
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.

 
show source | credits | sitemap | contact | advertising | mirror sites