Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
PHP: ucfirst - Manual
[go: Go Back, main page]

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

search for in the

ucwords" width="11" height="7"/> <trim
Last updated: Wed, 01 Nov 2006
view this page in

ucfirst

(PHP 3, PHP 4, PHP 5)

ucfirst -- 文字列の最初の文字を大文字にする

説明

string ucfirst ( string str )

strの最初の文字がアルファベットであれば、 それを大文字にします。

「アルファベット」かどうかというのは現在のロケールにより決定 されます。たとえば、デフォルトの "C" ロケールでは、ウムラウトa (ä)は変換されません。

例 1. ucfirst()の例

<?php
$foo
= 'hello world!';
$foo = ucfirst($foo);            // Hello world!

$bar = 'HELLO WORLD!';
$bar = ucfirst($bar);            // HELLO WORLD!
$bar = ucfirst(strtolower($bar)); // Hello world!
?>

strtoupper(), strtolower(), ucwords()も参照ください。



add a note add a note User Contributed Notes
ucfirst
zee
31-Jan-2007 09:09
Another way to capitalize first letter of every sentence in a text, I hope it will help someone. It won't convert non-English characters, though, and ignores sentences ending with ! or ? etc.

<?php

$text
="this is a sentence. this is another sentence.";

$split=explode(". ", $text);
foreach (
$split as $sentence) {
$sentencegood=ucfirst($sentence);
$text=str_replace($sentence, $sentencegood, $text);
}

echo
$text; // This is a sentence. This is another sentence.

?>
Carel at divers information with dotcom
06-Jan-2007 07:55
I made a small change. Now it takes care of points in numbers

function ucsentence ($string){
   $string = explode ('.', $string);
   $count = count ($string);
   for ($i = 0; $i < $count; $i++){
       $string[$i]  = ucfirst (trim ($string[$i]));
       if ($i > 0){
           if ((ord($string[$i]{0})<48) || (ord($string[$i]{0})>57)) {
             $string[$i] = ' ' . $string[$i];
           } 
       }
   }
   $string = implode ('.', $string);
   return $string;
}
26-Oct-2006 11:45
Some simple function for cyrillic and latin letters both:

function rucfirst($str) {
   if(ord(substr($str,0,1))<192) return ucfirst($str);
   else
   return chr(ord(substr($str,0,1))-32).substr($str,1);
}
Michael
12-Sep-2006 10:01
This is what you would expect php to deliver if there was a built-in function named ucsentence.

function ucsentence ($string){
   $string = explode ('.', $string);
   $count = count ($string);
   for ($i = 0; $i < $count; $i++){
       $string[$i]  = ucfirst (trim ($string[$i]));
       if ($i > 0){
           $string[$i] = '&nbsp;&nbsp;' . $string[$i];
       }
   }
   $string = implode ('.', $string);
   return $string;
}
Northie
05-Sep-2006 08:39
Sentence Case:

<?php

function SentenceCase($str) {
  
$sentences = explode(". ",$str);
   for(
$i=0;$i<count($sentences);$i++) {
      
$sentences[$i][0] = strtoupper($sentences[$i][0]);
   }

   return
implode(". ",$sentences);
}

?>
Markus Ernst
07-Aug-2006 07:20
I encountered that using my_mb_ucfirst() as posted below distorts characters such as the right single quote ’ (as typed with Alt-146 on Windows, or represented with &#8217; - I use it as a typographically correct apostrophe) or the n-dash – (Alt-150 / &#8211;). It looks like some or all non-latin1 characters get lost for utf8_encode(utf8_decode($string)).

Trying to work around this by replacing the first character only, and only if it was actually changed to Uppercase, I came to the following: 

<?php
function my_mb_ucfirst($str, $e='UTF-8') {
   if (
function_exists('mb_strtoupper')) {
      
$fc = mb_strtoupper(mb_substr($str, 0, 1, $e), $e);
       return
$fc.mb_substr($str, 1, mb_strlen($str, $e), $e);
   }
   else {
      
$latin1 = utf8_decode($str);
      
$first_lc = $latin1[0];
      
$first_uc = strtr($first_lc,
          
"abcdefghýijklmnopqrstuvwxyz".
          
"\x9C\x9A\xE0\xE1\xE2\xE3".
          
"\xE4\xE5\xE6\xE7\xE8\xE9".
          
"\xEA\xEB\xEC\xED\xEE\xEF".
          
"\xF0\xF1\xF2\xF3\xF4\xF5".
          
"\xF6\xF8\xF9\xFA\xFB\xFC".
          
"\xFE\xFF",
          
"ABCDEFGHÝIJKLMNOPQRSTUVWXYZ".
          
"\x8C\x8A\xC0\xC1\xC2\xC3\xC4".
          
"\xC5\xC6\xC7\xC8\xC9\xCA\xCB".
          
"\xCC\xCD\xCE\xCF\xD0\xD1\xD2".
          
"\xD3\xD4\xD5\xD6\xD8\xD9\xDA".
          
"\xDB\xDC\xDE\x9F");
       if (
$first_uc == $first_lc) return $str; // No change happened
      
else return utf8_encode($first_uc).substr($str, strlen(utf8_encode($first_lc)));
   }
}
?>
27-Jul-2006 06:31
lcfirst - In case you need to get the original string back after a ucfirst.

   function lcfirst( $str ) {
       $str[0] = strtolower($str[0]);
       return $str;
   }
Markus Ernst
31-Mar-2006 05:34
A combination of the below functions to enable ucfirst for multibyte strings in a shared hosting environment (where you can not always count on mbstring to be installed):

<?php
function my_mb_ucfirst($str, $e='utf-8') {
   if (
function_exists('mb_strtoupper')) {
      
$fc = mb_strtoupper(mb_substr($str, 0, 1, $e), $e);
       return
$fc.mb_substr($str, 1, mb_strlen($str, $e), $e);
   }
   else {
      
$str = utf8_decode($str);
      
$str[0] = strtr($str[0],
          
"abcdefghýijklmnopqrstuvwxyz".
          
"\x9C\x9A\xE0\xE1\xE2\xE3".
          
"\xE4\xE5\xE6\xE7\xE8\xE9".
          
"\xEA\xEB\xEC\xED\xEE\xEF".
          
"\xF0\xF1\xF2\xF3\xF4\xF5".
          
"\xF6\xF8\xF9\xFA\xFB\xFC".
          
"\xFE\xFF",
          
"ABCDEFGHÝIJKLMNOPQRSTUVWXYZ".
          
"\x8C\x8A\xC0\xC1\xC2\xC3\xC4".
          
"\xC5\xC6\xC7\xC8\xC9\xCA\xCB".
          
"\xCC\xCD\xCE\xCF\xD0\xD1\xD2".
          
"\xD3\xD4\xD5\xD6\xD8\xD9\xDA".
          
"\xDB\xDC\xDE\x9F");
       return
utf8_encode($str);
   }
}
?>
Bartuc
27-Feb-2006 10:28
Here is the fixed function for Turkish alphabet..

<?php

function uc_first($str){
  
$str[0] = strtr($str,
  
"abcdefghijklmnopqrstuvwxyz".
  
"\x9C\x9A\xE0\xE1\xE2\xE3".
  
"\xE4\xE5\xE6\xE7\xE8\xE9".
  
"\xEA\xEB\xEC\xED\xEE\xEF".
  
"\xF0\xF1\xF2\xF3\xF4\xF5".
  
"\xF6\xF8\xF9\xFA\xFB\xFC".
  
"\xFE\xFF",
  
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
  
"\x8C\x8A\xC0\xC1\xC2\xC3\xC4".
  
"\xC5\xC6\xC7\xC8\xC9\xCA\xCB".
  
"\xCC\xCD\xCE\xCF\xD0\xD1\xD2".
  
"\xD3\xD4\xD5\xD6\xD8\xD9\xDA".
  
"\xDB\xDC\xDE\x9F");
   return
$str;
}

?>
Markus Ernst
12-Jan-2006 11:39
plemieux' function did not work for me without passing the encoding to every single mb function (despite ini_set('default_charset', 'utf-8') at the top of the script). This is the example that works in my application (PHP 4.3):

<?php
function my_mb_ucfirst($str, $e='utf-8') {
  
$fc = mb_strtoupper(mb_substr($str, 0, 1, $e), $e);
   return
$fc.mb_substr($str, 1, mb_strlen($str, $e), $e);
}
?>
plemieux
30-Sep-2005 03:05
Simple multi-bytes ucfirst():

<?php
function my_mb_ucfirst($str) {
  
$fc = mb_strtoupper(mb_substr($str, 0, 1));
   return
$fc.mb_substr($str, 1);
}
?>
info [at] spwdesign [dot] com
23-Jun-2005 04:48
This is a simple code to get all the 'bad words', stored in a database, out of the text. You could use str_ireplace but since that's installed on PHP5 only, this works as well. It strtolowers the text first then places capitals with ucfirst() where it thinks a capital should be placed, at a new sentence. The previous sentence is ended by '. ' then.

<?php
function filter($text){
  
$filters=mysql_query("SELECT word,result FROM filter");
   while(
$filter=mysql_fetch_array($filters)){
      
$text=str_replace($filter[word],$filter[result],strtolower($text));
      
$parts=explode(". ",$text);
       for(
$i=0;$i<count($parts);$i++){
          
$parts[$i]=ucfirst($parts[$i]);
       }
      
$text=implode(". ",$parts);
   }
   return
$text;
}
?>
13-Mar-2005 10:11
Ah, the last code were spoiled, here is the fixed one:

<?php

function uc_first($str){
  
$str[0] = strtr($str,
  
"abcdefghijklmnopqrstuvwxyz".
  
"\x9C\x9A\xE0\xE1\xE2\xE3".
  
"\xE4\xE5\xE6\xE7\xE8\xE9".
  
"\xEA\xEB\xEC\xED\xEE\xEF".
  
"\xF0\xF1\xF2\xF3\xF4\xF5".
  
"\xF6\xF8\xF9\xFA\xFB\xFC".
  
"\xFD\xFE\xFF",
  
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
  
"\x8C\x8A\xC0\xC1\xC2\xC3\xC4".
  
"\xC5\xC6\xC7\xC8\xC9\xCA\xCB".
  
"\xCC\xCD\xCE\xCF\xD0\xD1\xD2".
  
"\xD3\xD4\xD5\xD6\xD8\xD9\xDA".
  
"\xDB\xDC\xDD\xDE\x9F");
   return
$str;
}

?>

So, this function changes also other letters into uppercase, ucfirst() does only change: a-z to: A-Z.
Stig-Arne Grnroos
26-Dec-2004 03:46
This function does not work as expected with characters from non-English alphabets (I only tested it with scandinavian letters, => ). It leaves them as lowercase.

Someone already commented that the function doesn't work on html entities, which is somewhat understandable. This bug however takes place before I convert the strings to html.
steven at tux dot appstate dot edu
22-Jun-2004 04:14
Note: the return for this function changed in versions 4.3 when a string is passed of length 0.  In <4.2 false is returned and in >4.3 a string of length 0 is returned.

Example:

$name = ucfirst("");
var_dump($name);

$name = ucfirst("owen");
var_dump($name);

Results for <4.2:
bool(false) string(4) "Owen"

Results for >4.3:
string(0) "" string(4) "Owen"
Ami Hughes (ami at mistress dot name)
08-Apr-2004 12:34
In the event you sort of need multiple delimiters to apply the same action to, you can preg_replace this "second delimiter" enveloping it with your actual delimiter.
 
A for instance, would be if you wanted to use something like Lee's FormatName function in an input box designed for their full name as this script was only designed to check the last name as if it were the entire string.  The problem is that you still want support for double-barreled names and you still want to be able to support the possibility that if the second part of the double-barreled name starts with "mc", that it will still be formatted correctly.

This example does a preg_replace that surrounds the separator with your actual delimiter.  This is just a really quick alternative to writing some bigger fancier blah-blah function.  If there's a shorter, simpler way to do it, feel free to inform me.  (Emphasis on shorter and simpler because that was the whole point of this.) :D

Here's the example.  I've removed Lee's comments as not to confuse them with my own.

<?php

  
function FormatName($name=NULL)
   {
       if (empty(
$name))
           return
false;

      
$name = strtolower($name);
      
$name = preg_replace("[\-]", " - ",$name); // Surround hyphens with our delimiter so our strncmp is accurate
      
if (preg_match("/^[a-z]{2,}$/i",$name))  // Simple preg_match if statement
      
{
          
          
$names_array = explode(' ',$name);  // Set the delimiter as a space.
  
          
for ($i = 0; $i < count($names_array); $i++)
           {
               if (
strncmp($names_array[$i],'mc',2) == 0 || ereg('^[oO]\'[a-zA-Z]',$names_array[$i]))
               {
                  
$names_array[$i][2] = strtoupper($names_array[$i][2]);
               }
              
$names_array[$i] = ucfirst($names_array[$i]);
              
           }
  
          
$name = implode(' ',$names_array);
          
$name = preg_replace("[ \- ]", "-",$name); //  Remove the extra instances of our delimiter
          
return ucwords($name);
          
       }
   }

?>
lazaro_tolentino at hotmail dot com
02-Apr-2004 06:16
this is a advance ucfirst function, for upper especifics words, with config in array of seperator
/**
 * @return string
 * @param string $str frase que passar pelo parce
 * @desc Pega uma frase e devolve a mesma com as palavras com suas
 * maiusculas  obedecendo um criterio configurado no array $string_sep
 *
 * @since 2004-04-01 15:04 adicionado a variavel $tring_sep que um
 * array contendo todos os separadores a serem usados
*/
function str_upper_lower($str)
{
   /**
   * array contendo todos os separadores
   */
   $string_sep=array(' ','-','/','_','.');
   /**
   * coloca todas as palavras com letras minusculas
   */
   $str=strtolower($str);
  
   /**
   * testa todos os separadores
   */
   for ($i=0;$i<count($string_sep);$i++)
   {
       $sep=$string_sep[$i];
       /**
       * separa a frase usando os separador atual
       */
       $array_words = explode($sep, $str);
      
       /**
       * variavel que conter o valor temporario
       */
       $tmp_str = '';
       $i2=0;
       foreach ($array_words as $word)
       {
           /**
           * se a quantidade de caracteres for maior que dois, ou se conter ponto,
           *  devolve upper da primeira letra
           */
           $tmp_str .=(strlen($word)>2 || strpos($word,'.')?ucfirst($word):$word);
           /**
           * no adiciona o separador no fim de strings
           */
           if ($i2<count($array_words)-1)
           {
               $tmp_str .= $sep;
           }
           $i2++;
       }
       $str = $tmp_str;
   }
   return $str;
}
Lee Benson
06-Mar-2004 07:37
Here's a function I threw together when needing to validate name entries (both first name and last name).

This allows simple formatting for names prefixed with "Mc" (like McDonald, McCulloch, etc) and names prefixed with O (like O'Reilly, O'Conner, etc)..

It also allows double-barrelled names to be formatted correctly, in the Smith-Jones way.

Here's the function...

<?php

  
function FormatName($name=NULL) {
      
      
/* Formats a first or last name, and returns the formatted
       version */
      
      
if (empty($name))
           return
false;
          
      
// Initially set the string to lower, to work on it
      
$name = strtolower($name);
          
      
// Run through and uppercase any multi-barrelled names

      
$names_array = explode('-',$name);

       for (
$i = 0; $i < count($names_array); $i++) {
          
          
// "McDonald", "O'Conner"..
          
if (strncmp($names_array[$i],'mc',2) == 0 || ereg('^[oO]\'[a-zA-Z]',$names_array[$i])) {
          
$names_array[$i][2] = strtoupper($names_array[$i][2]);
  
           }
          
          
// Always set the first letter to uppercase, no matter what
          
$names_array[$i] = ucfirst($names_array[$i]);
          
       }

      
// Piece the names back together
      
$name = implode('-',$names_array);

      
// Return upper-casing on all missed (but required) elements of the $name var
      
return ucwords($name);
      
   }

?>

If you have any other "rules" to follow for international/foreign naming rules, you can add them to the foreach loop, and it should still follow all of the other rules.

It's a quick fix, but it seems to do the job nicely.

Examples...

<?php

$name
= "o'cONNER-MCdOnAld";
echo
FormatName($name);

?>

Returns: O'Conner-McDonald
05-Mar-2004 02:46
Of course ucfirst() will _not_ convert html entities such as &uuml; (u-Umlaut as ) to &Uuml; which would represent .
bkimble at ebaseweb dot com
09-Jun-2003 09:02
Here is a handy function that makes the first letter of everything in a sentence upercase. I used it to deal with titles of events posted on my website ... I've added exceptions for uppercase words and lowercase words so roman numeral "IV" doesn't get printed as "iv" and words like "a" and "the" and "of" stay lowercase.

function RemoveShouting($string)
{
 $lower_exceptions = array(
       "to" => "1", "a" => "1", "the" => "1", "of" => "1"
 );
                                    
 $higher_exceptions = array(
       "I" => "1", "II" => "1", "III" => "1", "IV" => "1",
       "V" => "1", "VI" => "1", "VII" => "1", "VIII" => "1",
       "XI" => "1", "X" => "1"
 );

 $words = split(" ", $string);
 $newwords = array();
 
 foreach ($words as $word)
 {
       if (!$higher_exceptions[$word])
               $word = strtolower($word);
       if (!$lower_exceptions[$word])
               $word = ucfirst($word);
         array_push($newwords, $word);
 
 }
      
 return join(" ", $newwords); 
}

ucwords" width="11" height="7"/> <trim
Last updated: Wed, 01 Nov 2006
 
 
show source | credits | sitemap | contact | advertising | mirror sites