PHPのお勉強!

PHP TOP

ucfirst

(PHP 4, PHP 5, PHP 7, PHP 8)

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

説明

ucfirst(string $string): string

string の最初の文字が "a" (0x61) から "z" (0x7a) までの ASCII 文字の場合、 それを大文字にします。

パラメータ

string

入力文字列。

戻り値

変換後の文字列を返します。

変更履歴

バージョン 説明
8.2.0 ケース変換は、setlocale() で設定されたロケールに依存しなくなりました。 ASCII 文字のみが変換されます。

例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!
?>

参考

  • lcfirst() - 文字列の最初の文字を小文字にする
  • strtolower() - 文字列を小文字にする
  • strtoupper() - 文字列を大文字にする
  • ucwords() - 文字列の各単語の最初の文字を大文字にする
  • mb_convert_case() - 文字列に対してケースフォールディングを行う

add a note

User Contributed Notes 34 notes

up
75
plemieux
19 years ago
Simple multi-bytes ucfirst():

<?php
function my_mb_ucfirst($str) {
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return
$fc.mb_substr($str, 1);
}
?>
up
31
prokur.net - there is my email
16 years ago
I believe that mb_ucfirst will be soon added in PHP, but for now this could be useful
<?php

if (!function_exists('mb_ucfirst') && function_exists('mb_substr')) {
function
mb_ucfirst($string) {
$string = mb_strtoupper(mb_substr($string, 0, 1)) . mb_substr($string, 1);
return
$string;
}
}

?>

it also check is mb support enabled or not
up
3
Ekin
4 years ago
Using this function for Turkish language is won't work because of multi-byte characters. But you can use some tricks:

<?php
function ucfirst_tr($str) {
$trMap = ['Ğ'=>'ğ','Ü'=>'ü','Ş'=>'ş','İ'=>'i','Ö'=>'ö','Ç'=>'ç','I'=>'ı'];
$str = mb_strtolower(strtr($str, $trMap));
$first = mb_substr($str, 0, 1);
$first = strtr($first, array_flip($trMap));
$first = mb_strtoupper($first);
return
$first . mb_substr($str, 1);
}
?>
up
18
qeremy [atta] gmail [dotta] com
12 years ago
A proper Turkish solution;

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

$str = "iyilik güzelLİK";
echo
ucfirst($str) ."\n"; // Iyilik güzelLİK
echo ucfirst_turkish($str); // İyilik güzelLİK
?>
up
22
mattalexxpub at gmail dot com
16 years ago
This is what I use for converting strings to sentence case:

<?php
function sentence_case($string) {
$sentences = preg_split('/([.?!]+)/', $string, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
$new_string = '';
foreach (
$sentences as $key => $sentence) {
$new_string .= ($key & 1) == 0?
ucfirst(strtolower(trim($sentence))) :
$sentence.' ';
}
return
trim($new_string);
}

print
sentence_case('HMM. WOW! WHAT?');

// Outputs: "Hmm. Wow! What?"
?>
up
7
mingalevme at gmail dot com
11 years ago
Implementation of multi-bytes ucfirst for "multiword"-strings (module mbstring is required):

<?php

public static function ucfirst($str)
{
$str = mb_strtolower($str);
$words = preg_split('/\b/u', $str, -1, PREG_SPLIT_NO_EMPTY);
foreach (
$words as $word) {
$ucword = mb_strtoupper(mb_substr($word, 0, 1)) . mb_substr($word, 1);
$str = str_replace($word, $ucword, $str);
}
return
$str;
}

?>
up
10
charliefortune
16 years ago
Here's a function to capitalize segments of a name, and put the rest into lower case. You can pass the characters you want to use as delimiters.

i.e. <?php echo nameize("john o'grady-smith"); ?>

returns John O'Grady-Smith

<?php

function nameize($str,$a_char = array("'","-"," ")){
//$str contains the complete raw name string
//$a_char is an array containing the characters we use as separators for capitalization. If you don't pass anything, there are three in there as default.
$string = strtolower($str);
foreach (
$a_char as $temp){
$pos = strpos($string,$temp);
if (
$pos){
//we are in the loop because we found one of the special characters in the array, so lets split it up into chunks and capitalize each one.
$mend = '';
$a_split = explode($temp,$string);
foreach (
$a_split as $temp2){
//capitalize each portion of the string which was separated at a special character
$mend .= ucfirst($temp2).$temp;
}
$string = substr($mend,0,-1);
}
}
return
ucfirst($string);
}

?>
up
3
Bartuc
18 years ago
Here is the fixed function for Turkish alphabet..

<?php

function uc_first($str){
$str[0] = strtr($str,
"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",
"ABCDEFGHI?JKLMNOPQRSTUVWXYZ".
"\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;
}

?>
up
3
nospam at nospam dot com
7 years ago
Improved method of capitalizing first characters of sentences.
The first two manipulations (double spaces & all caps) are optional so can be removed without harm.

<?php
// return string with first letters of sentences capitalized
function ucsentence($str) {
if (
$str) { // input
$str = preg_replace('/'.chr(32).chr(32).'+/', chr(32), $str); // recursively replaces all double spaces with a space
if (($x = substr($str, 0, 10)) && ($x == strtoupper($x))) $str = strtolower($str); // sample of first 10 chars is ALLCAPS so convert $str to lowercase; if always done then any proper capitals would be lost
$na = array('. ', '! ', '? '); // punctuation needles
foreach ($na as $n) { // each punctuation needle
if (strpos($str, $n) !== false) { // punctuation needle found
$sa = explode($n, $str); // split
foreach ($sa as $s) $ca[] = ucfirst($s); // capitalize
$str = implode($n, $ca); // replace $str with rebuilt version
unset($ca); // clear for next loop
}
}
return
ucfirst(trim($str)); // capitalize first letter in case no punctuation needles found
}
}
?>

"heLLo EarthLing!" >> "HeLLo EarthLing!"
"I'M MOSTLY. caps! " >> "I'm mostly. Caps!"
"ALLCAPS" >> "Allcaps"
"i haVe neST.ed punct,u.ation! sp A c es. and CAPs.. " >> "I haVe neST.ed punct,u.ation! Sp A c es. And CAPs.."
up
2
Carel at divers information with dotcom
17 years ago
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;
}
up
2
kiprasbal at gmail dot com
10 years ago
My version, converst first letter of the first word in the string to uppercase

public function mb_ucfirst($str) {
$aParts = explode(" ",$str);
$firstWord = mb_convert_case($aParts[0],MB_CASE_TITLE,"UTF-8");
unset($aParts[0]);

return $firstWord." ".implode(" ",$aParts);
}
up
4
Quicker
13 years ago
if you want to ucfirst for utf8 try this one:

<?php
function ucfirst_utf8($stri){
if(
$stri{0}>="\xc3")
return ((
$stri{1}>="\xa0")?
(
$stri{0}.chr(ord($stri{1})-32)):
(
$stri{0}.$stri{1})).substr($stri,2);
else return
ucfirst($stri);
}
?>

It is quick, not language (but utf8) dependend and does not use any mb-functions such as mb_ucfirst.
up
3
pete at namecube dot net
14 years ago
for anyone wanting to ucfirst each word in a sentence this works for me:

<?php
function ucfirst_sentence($str)
{
return
preg_replace('/\b(\w)/e', 'strtoupper("$1")', $str);
}
?>
up
3
octavius
15 years ago
For lithuanian text with utf-8 encoding I use two functions (thanks [mattalexxpub at gmail dot com] and Svetoslav Marinov)

<?php
function my_ucfirst($string, $e ='utf-8') {
if (
function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($string)) {
$string = mb_strtolower($string, $e);
$upper = mb_strtoupper($string, $e);
preg_match('#(.)#us', $upper, $matches);
$string = $matches[1] . mb_substr($string, 1, mb_strlen($string, $e), $e);
}
else {
$string = ucfirst($string);
}
return
$string;
}

function
sentence_case($string) {
$sentences = preg_split('/([.?!]+)/', $string, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
$new_string = '';
foreach (
$sentences as $key => $sentence) {
$new_string .= ($key & 1) == 0?
my_ucfirst(strtolower(trim($sentence))) :
$sentence.' ';
}
return
trim($new_string);
}
?>
up
1
Anonymous
7 years ago
Format the input string:

<?php

function ucsentences($string){
$parts = preg_split('/([^\.\!\?;]+[\.\!\?;"]+)/', strtolower($string), (-1), PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
$r = '';
foreach(
$parts as $key=>$sentence){
$r .= ucfirst(trim($sentence)) . ' ';
}
$r = preg_replace('/\bi\b/', 'I', $r);
$r = preg_replace_callback('/("[a-z])/', function($m){ return strtoupper($m[0]);}, $r);
return
rtrim($r);
}

$str = 'i\'m not sure. if this is good enough, but i thought: "hey, who know\'s. maybe i am right."';

?>
Outputs:
I'm not sure. If this is good enough, but I thought: "Hey, who know's. Maybe I am right."
up
2
vlknmtn at gmail dot com
13 years ago
Turkish solution:

<?php
mb_internal_encoding
("UTF-8");
mb_regex_encoding("UTF-8");

function
tr_ilkbuyuk($text)
{
$text = str_replace("I","ı",$text);
$text = mb_strtolower($text, 'UTF-8');

if(
$text[0] == "i")
$tr_text = "İ".substr($text, 1);
else
$tr_text = mb_convert_case($text, MB_CASE_TITLE, "UTF-8");

return
trim($tr_text);
}

function
tr_ucwords($text)
{
$p = explode(" ",$text);
if(
is_array($p))
{
$tr_text = "";
foreach(
$p AS $item)
$tr_text .= " ".tr_ilkbuyuk($item);

return
trim($tr_text);
}
else
return
tr_ilkbuyuk($text);
}

$deger = "ıişllşlsdg";

echo
tr_ucwords($deger);

?>
up
2
Markus Ernst
18 years ago
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);
}
?>
up
4
svetoslavm at gmail dot com
16 years ago
For some reason this worked for me.

Mac OS 10.5.1
PHP 5.2.6

<?php
/**
* ucfirst UTF-8 aware function
*
* @param string $string
* @return string
* @see http://ca.php.net/ucfirst
*/
function my_ucfirst($string, $e ='utf-8') {
if (
function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($string)) {
$string = mb_strtolower($string, $e);
$upper = mb_strtoupper($string, $e);
preg_match('#(.)#us', $upper, $matches);
$string = $matches[1] . mb_substr($string, 1, mb_strlen($string, $e), $e);
} else {
$string = ucfirst($string);
}
return
$string;
}
?>

Svetoslav Marinov
http://slavi.biz
up
1
bgschool
15 years ago