ucwords

(PHP 4, PHP 5)

ucwords — Преобразует в верхний регистр первый символ каждого слова в строке

Описание

string ucwords ( string $str )

Возвращает строку string , в которой первый символ каждого слова переведен в верхний регистр, если этот символ буквенный.

Эта функция считает словами последовательности символов, разделенных пробелом, переводом строки, возвратом каретки, горизонтальной или вертикальной табуляцией.

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

<?php
$foo 
'hello world!';
$foo ucwords($foo);             // Hello World! 

$bar 'HELLO WORLD!';
$bar ucwords($bar);             // HELLO WORLD!
$bar ucwords(strtolower($bar)); // Hello World!
?>

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

См. также описание функций strtoupper(), strtolower() и ucfirst().

Коментарии

The code posted above by Joerg Krause only works for a string which ends with one of the delimiters. A possible fix is:

<?php
$text 
"What?No delimiters,shit happens here.this solves all problems."
preg_match_all("/(\w+[,. ?])+/U"$text$words); 
preg_match("/(\w+)$/"$text$lastword);
$words[0][] = $lastword;
foreach(
$words[0] as $part$uwords[] = ucfirst($part); 
$text implode(""$uwords); 
echo 
$text;
?>
2001-03-21 07:10:07
http://php5.kiev.ua/manual/ru/function.ucwords.html
Автор:
This seems to be what people want:

function uc_all($string) {
    $temp = preg_split('/(\W)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE );
    foreach ($temp as $key=>$word) {
        $temp[$key] = ucfirst(strtolower($word));
    }
    return join ('', $temp);
}

[ed note: fixed the code to be correct]
2002-01-18 20:14:34
http://php5.kiev.ua/manual/ru/function.ucwords.html
A function knowing about name case (i.e. caps on McDonald etc)

function name_case($name)
{
    $newname = strtoupper($name[0]);   
    for ($i=1; $i < strlen($name); $i++) 
    { 
        $subed = substr($name, $i, 1);     
        if (((ord($subed) > 64) && (ord($subed) < 123)) || 
            ((ord($subed) > 48) && (ord($subed) < 58))) 
        { 
            $word_check = substr($name, $i - 2, 2);
            if (!strcasecmp($word_check, 'Mc') || !strcasecmp($word_check, "O'")) 
            {
                $newname .= strtoupper($subed); 
            }
            else if ($break) 
            { 
               
                $newname .= strtoupper($subed); 
            } 
            else       
            { 
                $newname .= strtolower($subed); 
            } 
             $break=0; 
        }
        else
        { 
            // not a letter - a boundary 
             $newname .= $subed; 
            $break=1; 
        }
    }   
    return $newname;
}
2002-12-10 01:20:33
http://php5.kiev.ua/manual/ru/function.ucwords.html
Автор:
"ieure at php dot net", your idea is pure poetry!

The function below will standardize the capitalization on people's names and the titles of reports and essays . You may need to adapt the lists in "$all_uppercase" and "$all_lowercase" to suit the data that you are working with.

function my_ucwords($str, $is_name=false) {
   // exceptions to standard case conversion
   if ($is_name) {
       $all_uppercase = '';
       $all_lowercase = 'De La|De Las|Der|Van De|Van Der|Vit De|Von|Or|And';
   } else {
       // addresses, essay titles ... and anything else
       $all_uppercase = 'Po|Rr|Se|Sw|Ne|Nw';
       $all_lowercase = 'A|And|As|By|In|Of|Or|To';
   }
   $prefixes = 'Mc';
   $suffixes = "'S";

   // captialize all first letters
   $str = preg_replace('/\\b(\\w)/e', 'strtoupper("$1")', strtolower(trim($str)));

   if ($all_uppercase) {
       // capitalize acronymns and initialisms e.g. PHP
       $str = preg_replace("/\\b($all_uppercase)\\b/e", 'strtoupper("$1")', $str);
   }
   if ($all_lowercase) {
       // decapitalize short words e.g. and
       if ($is_name) {
           // all occurences will be changed to lowercase
           $str = preg_replace("/\\b($all_lowercase)\\b/e", 'strtolower("$1")', $str);
       } else {
           // first and last word will not be changed to lower case (i.e. titles)
           $str = preg_replace("/(?<=\\W)($all_lowercase)(?=\\W)/e", 'strtolower("$1")', $str);
       }
   }
   if ($prefixes) {
       // capitalize letter after certain name prefixes e.g 'Mc'
       $str = preg_replace("/\\b($prefixes)(\\w)/e", '"$1".strtoupper("$2")', $str);
   }
   if ($suffixes) {
       // decapitalize certain word suffixes e.g. 's
       $str = preg_replace("/(\\w)($suffixes)\\b/e", '"$1".strtolower("$2")', $str);
   }
   return $str;
}

// A name example
print my_ucwords("MARIE-LOU VAN DER PLANCK-ST.JOHN", true);
// Output: Marie-Lou van der Planc-St.John

// A title example
print my_ucwords("to be or not to be");
// Output: "To Be or Not to Be"
2005-12-24 09:34:36
http://php5.kiev.ua/manual/ru/function.ucwords.html
In the function ucsmart() posted by ieure at php dot net on 04-Dec-2005 11:57, I found a similar problem in this function to what he found in igua's.

<?php
function ucsmart($text)
{
   return 
preg_replace('/([^a-z]|^)([a-z])/e''"$1".strtoupper("$2")',
                       
strtolower($text));
}
?>

"igua's code adds a backslash in front of the first single quote for me. This doesn't alter the content in any way other than changing case."

Actually, it did end up changing the content for me (php 5.0.4) in the way that this function escapes a single quotation (apostrophe) in the MIDDLE of a word.

For example:

who's online?

Became:

Who\'s Online?

The fix is simple however, and merely requires fine-tuning the regular expression:

<?php
function ucsmart($text)
{
   return 
preg_replace('/([^a-z\']|^)([a-z])/e''"$1".strtoupper("$2")',
                       
strtolower($text));
}
?>

(note: while previewing this note before adding it, I am noticing php's website is not correctly displaying the change I made as I wrote it. After the first a-z in the expression, the single quotation should be escaped... If it isn't you will get a parse error! And apoligies if my text here is colored as php code; not my fault!)

This will not escape a single quotation mark which occurs in the middle of a word... Though, you may find that might need to add other characters inside the regular expression if you use other special characters inside your words and if you get funky output.

It's a great expression though! Simple, yet very powerful. Kudos!
2006-05-06 04:44:09
http://php5.kiev.ua/manual/ru/function.ucwords.html
Автор:
Response to arif:

We do not need that long functions. In order to make ucwords() worked properly in Turkish words that contain speacial characters, we can use the following command in our php codes:

setlocale(LC_ALL, 'tr_TR');

This will set locale to Turkish.
2006-05-30 20:07:57
http://php5.kiev.ua/manual/ru/function.ucwords.html
A very easy way to convert to title case:

function titleCase($string)
     {
     return ucwords(strtolower($string));
     }

$myString = "SOME TEXT";

echo titleCase($myString);

//will print, "My Text"
2007-01-03 10:53:26
http://php5.kiev.ua/manual/ru/function.ucwords.html
ucwords() only excepts whitespace in front of a word, although some chars like '"' or '(' normally have no space between them and the following word:
<?php
$title 
'ELVIS "THE KING" PRESLEY - (LET ME BE YOUR) TEDDY BEAR';
echo 
ucwords(strtolower($title));
?>
prints: Elvis "the King" Presley - (let Me Be Your) Teddy Bear

To avoid this i use a small function adding and deleting blanks behind these chars, and using ucwords() in between:

<?php
function my_ucwords($string)
  { 
   
$noletters='"([/'//add more if u need to
   
for($i=0$i<strlen($noletters); $i++)
     
$string str_replace($noletters[$i], $noletters[$i].' '$string);
   
$string=ucwords($string);
    for(
$i=0$i<strlen($noletters); $i++)
     
$string str_replace($noletters[$i].' '$noletters[$i], $string);
    return 
$string;
  }

$title 'ELVIS "THE KING" PRESLEY - (LET ME BE YOUR) TEDDY BEAR';
echo 
my_ucwords(strtolower($title));
?>

prints: Elvis "The King" Presley - (Let Me Be Your) Teddy Bear
2007-05-05 03:49:23
http://php5.kiev.ua/manual/ru/function.ucwords.html
Here is a function to capitalize a last name, accounting for hyphens, apostrophes, "Mc" and "Mac":

<?php
function CapitalizeLastName($name) {
   
$name strtolower($name);
   
$name join("'"array_map('ucwords'explode("'"$name)));
   
$name join("-"array_map('ucwords'explode("-"$name)));
   
$name join("Mac"array_map('ucwords'explode("Mac"$name)));
   
$name join("Mc"array_map('ucwords'explode("Mc"$name)));
    return 
$name;
}
?>

I speed tested it against functions that used preg_replace() with an "e" modifier, preg_replace_callback(), and a character-by-character parsing.  Unexpectedly, this function using join(), array_map() and explode() was fastest.
2007-07-30 16:02:39
http://php5.kiev.ua/manual/ru/function.ucwords.html
Relating to the mb_ucwords() function posted by Anonymous.  In order for this to actually be multi-byte compliant, you would also need to use mb_substr() and mb_strlen() instead of substr and strlen respectively.

Here it is corrected and extended even further to allow multiple word separators and a list of exceptions to correct after title casing. It's a bit tedious and inelegant, but things frequently are when dealing with human languages.

function mb_ucwords($str) {
    $exceptions = array();
    $exceptions['Hp'] = 'HP';
    $exceptions['Ibm'] = 'IBM';
    $exceptions['Gb'] = 'GB';
    $exceptions['Mb'] = 'MB';
    $exceptions['Cd'] = 'CD';
    $exceptions['Dvd'] = 'DVD';
    $exceptions['Usb'] = 'USB';
    $exceptions['Mm'] = 'mm';
    $exceptions['Cm'] = 'cm';
    //    etc.
   
    $separator = array(" ","-","+");
   
    $str = mb_strtolower(trim($str));
    foreach($separator as $s){
        $word = explode($s, $str);

        $return = "";
        foreach ($word as $val){
            $return .= $s . mb_strtoupper($val{0}) . mb_substr($val,1,mb_strlen($val)-1);
        }
        $str = mb_substr($return, 1);
    }

    foreach($exceptions as $find=>$replace){
        if (mb_strpos($return, $find) !== false){
            $return = str_replace($find, $replace, $return);
        }
    }
    return mb_substr($return, 1);
}
2008-01-29 19:14:27
http://php5.kiev.ua/manual/ru/function.ucwords.html
Автор:
A modified sentenceNormalizer by gregomm
 
Features:
1- Removes duplicated question marks, exclamations and periods
2- Capitalize first letter of a sentence.
3- Split sentences not only with "." but also with "?" and "!"
4- Puts a white space at the end of each sentence
5- Retains newlines

--removed from orginal function--
undestand the meaning of "¡" and "¿" in languages like spanish.
undestand the htmlentitity version of this simbols.
--removed from orginal function--

<?php
function sentenceNormalizer($sentence_split) {
   
$sentence_split preg_replace(array('/[!]+/','/[?]+/','/[.]+/'),
                                   array(
'!','?','.'),$sentence_split);       
   
   
$textbad preg_split("/(\!|\.|\?|\n)/"$sentence_split,-1,PREG_SPLIT_DELIM_CAPTURE);
   
$newtext = array();
   
$count sizeof($textbad);
   
    foreach(
$textbad as $key => $string) {
        if (!empty(
$string)) {
           
$text trim($string' ');
           
$size strlen($text);
           
            if (
$size 1){     
               
$newtext[] = ucfirst(strtolower($text));
            }
                elseif (
$size == 1) {
                   
$newtext[] = ($text == "\n") ? $text $text ' ';
                }     
        }
    }
   
    return 
implode($newtext);
}
?>
2008-08-27 12:43:26
http://php5.kiev.ua/manual/ru/function.ucwords.html
ucwords for UTF-8 strings:

<?php
function mb_ucwords($str) {
   
$str mb_convert_case($strMB_CASE_TITLE"UTF-8");
    return (
$str);
}
?>
2008-11-01 04:45:15
http://php5.kiev.ua/manual/ru/function.ucwords.html
Автор:
I did the same thing as Catalin, but for French names.

Here's what I'm doing :

For each word (not considering the single-quote as a word boundary character) :
- Put the word in lower case
- If the word is "de", return, else, put the first letter in upper-case
- See if the second character of the word is a single-quote
- Yes ? Put the next char in upper case
- And if the char before the single quote is D, put it back to lower case (-> d)

This complies with the French rules for capitalization in names.

Sample results :
-d'Afoo Bar
-de Foo Bar
-O'Foo Bar
-Foo'bar

<?php
function my_ucwords($s) {
       
$s preg_replace_callback("/(\b[\w|']+\b)/s"fixcase_callback$s);
       
        return 
$s;         
       
    }
   
    function 
fixcase_callback($word) {

       
$word $word[1];
       
       
$word strtolower($word);
       
        if(
$word == "de")
            return 
$word;
       
       
$word ucfirst($word);
       
        if(
substr($word,1,1) == "'") {
            if(
substr($word,0,1) == "D") {
               
$word strtolower($word);
            }
           
$next substr($word,2,1);
           
$next strtoupper($next);
           
$word substr_replace($word$next21);
        }
       
        return 
$word;
    }
?>
2009-04-26 12:16:30
http://php5.kiev.ua/manual/ru/function.ucwords.html
Some recipes for switching between underscore and camelcase naming:

<?php
// underscored to upper-camelcase
// e.g. "this_method_name" -> "ThisMethodName"
preg_replace('/(?:^|_)(.?)/e',"strtoupper('$1')",$string);

// underscored to lower-camelcase
// e.g. "this_method_name" -> "thisMethodName"
preg_replace('/_(.?)/e',"strtoupper('$1')",$string);

// camelcase (lower or upper) to underscored
// e.g. "thisMethodName" -> "this_method_name"
// e.g. "ThisMethodName" -> "this_method_name"
strtolower(preg_replace('/([^A-Z])([A-Z])/'"$1_$2"$string));
?>

Of course these aren't 100% symmetric.  For example...
  * this_is_a_string -> ThisIsAString -> this_is_astring
  * GetURLForString -> get_urlfor_string -> GetUrlforString
2009-07-08 09:42:33
http://php5.kiev.ua/manual/ru/function.ucwords.html
My quick and dirty ucname (Upper Case Name) function.

<?php
//FUNCTION

function ucname($string) {
   
$string =ucwords(strtolower($string));

    foreach (array(
'-''\'') as $delimiter) {
      if (
strpos($string$delimiter)!==false) {
       
$string =implode($delimiterarray_map('ucfirst'explode($delimiter$string)));
      }
    }
    return 
$string;
}
?>
<?php
//TEST

$names =array(
 
'JEAN-LUC PICARD',
 
'MILES O\'BRIEN',
 
'WILLIAM RIKER',
 
'geordi la forge',
 
'bEvErly CRuSHeR'
);
foreach (
$names as $name) { print ucname("{$name}\n"); }

//PRINTS:
/*
Jean-Luc Picard
Miles O'Brien
William Riker
Geordi La Forge
Beverly Crusher
*/
?>

You can add more delimiters in the for-each loop array if you want to handle more characters.
2010-02-12 10:51:46
http://php5.kiev.ua/manual/ru/function.ucwords.html
Turkish character with the ucwords function...

<?php
function ucwords_tr($gelen){

 
$sonuc='';

 
$kelimeler=explode(" "$gelen);

  foreach (
$kelimeler as $kelime_duz){

   
$kelime_uzunluk=strlen($kelime_duz);
   
$ilk_karakter=mb_substr($kelime_duz,0,1,'UTF-8');

    if(
$ilk_karakter=='Ç' or $ilk_karakter=='ç'){

     
$ilk_karakter='Ç';

    }elseif (
$ilk_karakter=='Ğ' or $ilk_karakter=='ğ') {

     
$ilk_karakter='Ğ';

    }elseif(
$ilk_karakter=='I' or $ilk_karakter=='ı'){

     
$ilk_karakter='I';

    }elseif (
$ilk_karakter=='İ' or $ilk_karakter=='i'){

     
$ilk_karakter='İ';

    }elseif (
$ilk_karakter=='Ö' or $ilk_karakter=='ö'){

     
$ilk_karakter='Ö';

    }elseif (
$ilk_karakter=='Ş' or $ilk_karakter=='ş'){

     
$ilk_karakter='Ş';

    }elseif (
$ilk_karakter=='Ü' or $ilk_karakter=='ü'){

     
$ilk_karakter='Ü';

    }else{

     
$ilk_karakter=strtoupper($ilk_karakter);

    }

   
$digerleri=mb_substr($kelime_duz,1,$kelime_uzunluk,'UTF-8');
   
$sonuc.=$ilk_karakter.kucuk_yap($digerleri).' ';

  }

 
$son=trim(str_replace('  '' '$sonuc));
  return 
$son;

}

function 
kucuk_yap($gelen){

 
$gelen=str_replace('Ç''ç'$gelen);
 
$gelen=str_replace('Ğ''ğ'$gelen);
 
$gelen=str_replace('I''ı'$gelen);
 
$gelen=str_replace('İ''i'$gelen);
 
$gelen=str_replace('Ö''ö'$gelen);
 
$gelen=str_replace('Ş''ş'$gelen);
 
$gelen=str_replace('Ü''ü'$gelen);
 
$gelen=strtolower($gelen);

  return 
$gelen;
}

echo 
ucwords_tr('ŞEKardi ŞEMŞİYE ĞELENÖ ÖMER'); // Şekardi Şemşiye Ğelenö Ömer
echo ucwords_tr('şEKER iMSAK şÖLEN'); // Şeker İmsak Şölen
2011-10-16 14:14:51
http://php5.kiev.ua/manual/ru/function.ucwords.html
Thanks a lot brother.

I tested it with a few variations. It works perfectly. Its really great and simple usage of the existing functions. It would be glad to all PHP folks and good to PHP if these kind of functions will be in PHP library on upcoming releases.

<?php 

$name1 
"mark-yves robert";
$name2 "mark-yves robert-bryan";

echo 
'<br/>Name 1 (mark-yves robert) =>'.
ucwordspecific($name1,'-'); //returns Mark-Yves Robert

echo '<br/>Name 2 (mark-yves robert-bryan) 

=>'
.ucwordspecific($name2,'-'); 
//returns Mark-Yves Robert-Bryan

function ucwordspecific($str,$delimiter){
$delimiter_space '- ';
return 
str_replace($delimiter_space,$delimiter,ucwords

(str_replace($delimiter,$delimiter_space,$str)));
}

?>

Proud to be a PHP enthusiast always :-)
2011-11-21 11:14:23
http://php5.kiev.ua/manual/ru/function.ucwords.html
A proper Turkish solution;

<?php
function ucfirst_turkish($str) {
   
$tmp preg_split("//u"$str2PREG_SPLIT_NO_EMPTY);
    return 
mb_convert_case(
       
str_replace("i""İ"$tmp[0]), MB_CASE_TITLE"UTF-8").
       
$tmp[1];
}

function 
ucwords_turkish($str) {
    return 
preg_replace("/(\\w+)/ue""ucfirst_turkish('\\\\1').'$2'"$str);
}

$str "iyilik güzelLİK şeker ";
echo 
ucwords($str) ."\\n";   // Iyilik GüzelLİK şeker 
echo ucwords_turkish($str); // İyilik GüzelLİK Şeker 
?>
2012-02-27 19:09:04
http://php5.kiev.ua/manual/ru/function.ucwords.html
Features:
- multi byte compatible
- handles multiple delimiters

<?php
function ucwords_specific ($string$delimiters ''$encoding NULL)
{
    if (
$encoding === NULL) { $encoding mb_internal_encoding();}

    if (
is_string($delimiters))
    {
       
$delimiters str_splitstr_replace(' '''$delimiters));
    }

   
$delimiters_pattern1 = array();
   
$delimiters_replace1 = array();
   
$delimiters_pattern2 = array();
   
$delimiters_replace2 = array();
    foreach (
$delimiters as $delimiter)
    {
       
$uniqid uniqid();
       
$delimiters_pattern1[]   = '/'preg_quote($delimiter) .'/';
       
$delimiters_replace1[]   = $delimiter.$uniqid.' ';
       
$delimiters_pattern2[]   = '/'preg_quote($delimiter.$uniqid.' ') .'/';
       
$delimiters_replace2[]   = $delimiter;
    }

   
// $return_string = mb_strtolower($string, $encoding);
   
$return_string $string;
   
$return_string preg_replace($delimiters_pattern1$delimiters_replace1$return_string);

   
$words explode(' '$return_string);

    foreach (
$words as $index => $word)
    {
       
$words[$index] = mb_strtoupper(mb_substr($word01$encoding), $encoding).mb_substr($word1mb_strlen($word$encoding), $encoding);
    }

   
$return_string implode(' '$words);

   
$return_string preg_replace($delimiters_pattern2$delimiters_replace2$return_string);

    return 
$return_string;
}
?>

Params:
1. string: The string being converted
2. delimiters: a string with all wanted delimiters written one after the other e.g. "-'"
3. encoding: Is the character encoding. If it is omitted, the internal character encoding value will be used.

Example Usage:
<?php
mb_internal_encoding
('UTF-8');
$string "JEAN-PAUL d'artagnan şŠ-òÀ-éÌ hello - world";
echo 
ucwords_specificmb_strtolower($string'UTF-8'), "-'");
?>

Output:
Jean-Paul D'Artagnan Şš-Òà-Éì Hello - World
2012-09-10 18:41:45
http://php5.kiev.ua/manual/ru/function.ucwords.html
UTF-8 Title Case that works for me even with hyphens involved!

$str = 'ĐaaČaa-AAAaaa, BBbb';

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

echo($str): 'Đaačaa-Aaaaaa, Bbbb'
2013-04-30 17:44:20
http://php5.kiev.ua/manual/ru/function.ucwords.html
Para formatar nomes em pt-br:

<?php

   
function titleCase($string$delimiters = array(" ""-"".""'""O'""Mc"), $exceptions = array("de""da""dos""das""do""I""II""III""IV""V""VI"))
    {
       
/*
         * 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;
    }

?>

Usage:

<?php
    $s 
'SÃO JOÃO DOS SANTOS';
   
$v titleCase($s); // 'São João dos Santos' 
?>
2013-07-23 21:04:40
http://php5.kiev.ua/manual/ru/function.ucwords.html
Автор:
to convert first letters in a firstname like: "jean-pierre" to "Jean-Pierre":

I simply replace the '-' with a vertical tabulation, because the ucwords() function replace the letter just after it.

so, I use the sentence:
$result=str_replace(chr(11),'-',ucwords(strtolower(str_replace('-',chr(11),$firstname))));
2015-02-20 10:03:09
http://php5.kiev.ua/manual/ru/function.ucwords.html
Автор:
Convert string to in camel-case, useful for class name patterns:
<?php
/**
   * Convert string to in camel-case, useful for class name patterns.
   *
   * @param $string
   *   Target string.
   *
   * @return string
   *   Camel-case string.
   */
function toCamelCase($string){
   
$string str_replace('-'' '$string);
   
$string str_replace('_'' '$string);
   
$string ucwords(strtolower($string));
   
$string str_replace(' '''$string);
    return 
$string;
}
?>

Example:
toCamelCase(make_mE camel-case pLEase) will return:
MakeMeCamelCasePlease
2015-05-13 12:22:58
http://php5.kiev.ua/manual/ru/function.ucwords.html
Автор:
This will correct capitalisation in names taking note of special capitalisation for Mc..., Mac..., and O'... Other special cases, of which I am not aware, can be added easily.

This is just a slight improvement on "deepdene at email dot com"'s name_case function... Thank you for original function.

<?php

function name_case($name) {
    if( !
$name ) return $name;
   
$newname strtoupper($name[0]);
   
$break false;
    for( 
$i=1$i<strlen($name); ++$i ) {
     
$subed substr($name$i1);
      if( 
ord($subed) > 64 && ord($subed) < 123 || ord($subed) > 48 && ord($subed) < 58 ) {
        if( 
$break ) {
         
$newname .= strtoupper($subed);
        }
        elseif( 
$i && in_array(substr($newname$i-22), array('Mc''O\'')) || $i && in_array(substr($newname$i-33), array('Mac')) ) {
         
$newname .= strtoupper($subed); 
        }
        else {
         
$newname .= strtolower($subed);
        }
       
$break false;
      }
      else {
       
// not a letter - a boundary
       
$newname .= $subed;
       
$break true;
      }
    }   
    return 
$newname;

?>
2015-09-01 17:36:31
http://php5.kiev.ua/manual/ru/function.ucwords.html
ucwords for human names in Brazil.
ucwords personalizada para nomes próprios brasileiros.

<?php
   
/**
     * ucwords for human names in Brazil
     * Edit from http://php.net/manual/pt_BR/function.ucwords.php#112795
     * @param string $str
     * @param array $delimiters
     * @param array $exceptions Exceptions are words you don't want converted
     * @return string
     */
   
function name($str$delimiters = array(
       
" ",
       
"-",
       
".",
       
"'",
       
"O'",
       
"Mc",
    ), 
$exceptions = array(
       
"de",
       
"do",
       
"da",
       
"dos",
       
"das",
    )) {
       
$result '';

        foreach (
$delimiters as $delimiter) {
           
# If string has a delimiter
           
if (strstr($str$delimiter)) {

               
$ucfirst = array();
               
# Apply ucfirst to every word
               
foreach (explode($delimitermb_strtolower($str)) as $word) {
                   
$word mb_convert_case($wordMB_CASE_TITLE);

                   
# Working with exceptions
                   
if (in_array(mb_strtoupper($word), $exceptions)) {
                       
$word mb_strtoupper($word);
                    } elseif (
in_array(mb_strtolower($word), $exceptions)) {
                       
$word mb_strtolower($word);
                    } elseif (
preg_match('/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/'mb_strtoupper($word))) {
                       
# Is roman numerals? # http://stackoverflow.com/a/267405/437459
                       
$word mb_strtoupper($word);
                    }

                   
$ucfirst[] = $word;
                }

               
# string's first character uppercased
               
$result implode($delimiter$ucfirst);
            }
        }

        return 
$result;
    }
?>
2016-02-29 22:36:45
http://php5.kiev.ua/manual/ru/function.ucwords.html
Автор:
for PHP < 5.4.32 with $delimiters

function _ucwords( $str, $delimiters = " \t\r\n\f\v" ) {

    $delims = preg_split( '//u', $delimiters, -1, PREG_SPLIT_NO_EMPTY );

    foreach ( $delims as $delim ) {
       
        if ( false !== strpos( $str, $delim ) ) {

            $str = implode( $delim, array_map( 'ucfirst', explode( $delim, $str ) ) );
        }
    }

    return $str;
}
2018-09-04 12:39:00
http://php5.kiev.ua/manual/ru/function.ucwords.html
<?php
function mb_ucwords($string$delimiter ' (-"[') {
   
$result $upper '';
    for (
$i 0$i mb_strlen($string); $i++) {
       
$letter mb_substr($string$i1);
       
$result .= $upper || $i == mb_convert_case($letterMB_CASE_TITLE) : $letter;
       
$upper = ($i 1) < mb_strlen($string) && mb_strpos($delimiter$letter) !== false 0;
    }
    return 
$result;
}
?>
2020-05-26 16:03:39
http://php5.kiev.ua/manual/ru/function.ucwords.html
Based on code sample originally posted by "Anonymous" on 2005-12-14. The /e modifier is no longer supported by preg_replace(). Rewritten to use preg_replace_callback() instead. Tested with PHP 7.3.

The function below will standardize the capitalization on people's names, addresses, and the titles of reports and essays . Adapt the lists in "$all_uppercase" and "$all_lowercase" to suit the data that you are working with.

function ucwords_title($string, $is_name = false) {
    // Exceptions to standard case conversion
    if ($is_name) {
        $all_uppercase = '';
        $all_lowercase = 'De La|De Las|Der|Van De|Van Der|Vit De|Von|Or|And';
    } else {
        // Addresses, essay titles ... and anything else
        $all_uppercase = 'Us|Ca|Mx|Po|Rr|Se|Sw|Ne|Nw';
        $all_lowercase = 'A|And|As|By|In|Of|Or|To';
    }
    $prefixes = 'Mac|Mc';
    $suffixes = "'S";

    // Trim whitespace and convert to lowercase
    $str = strtolower(trim($string));

    // Capitalize all first letters
    $str = preg_replace_callback('/\\b(\\w)/', function ($m) {
        return strtoupper($m[1]);
    }, $str);

    if ($all_uppercase) {
        // Capitalize acronyms and initialisms (e.g. PHP)
        $str = preg_replace_callback('/\\b(' . $all_uppercase . ')\\b/', function ($m) {
            return strtoupper($m[1]);
        }, $str);
    }
    if ($all_lowercase) {
        // Decapitalize short words (e.g. and)
        if ($is_name) {
            // All occurrences will be changed to lowercase
            $str = preg_replace_callback('/\\b(' . $all_lowercase . ')\\b/', function ($m) {
                return strtolower($m[1]);
            }, $str);
        } else {
            // First and last word will not be changed to lower case (i.e. titles)
            $str = preg_replace_callback('/(?<=\\W)(' . $all_lowercase . ')(?=\\W)/', function ($m) {
                return strtolower($m[1]);
            }, $str);
        }
    }
    if ($prefixes) {
        // Capitalize letter after certain name prefixes (e.g 'Mc')
        $str = preg_replace_callback('/\\b(' . $prefixes . ')(\\w)/', function ($m) {
            return $m[1] . strtoupper($m[2]);
        }, $str);
    }
    if ($suffixes) {
        // Decapitalize certain word suffixes (e.g. 's)
        $str = preg_replace_callback('/(\\w)(' . $suffixes . ')\\b/', function ($m) {
            return $m[1] . strtolower($m[2]);
        }, $str);
    }

    return $str;
}

// A name example
print ucwords_title("MARIE-LOU VAN DER PLANCK-ST.JOHN", true);
// Output: Marie-Lou van der Planc-St.John

// A title example
print ucwords_title("to be or not to be");
// Output: "To Be or Not to Be"
2020-07-25 20:08:31
http://php5.kiev.ua/manual/ru/function.ucwords.html

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