字符串函数
在线手册:中文  英文

strtoupper

(PHP 4, PHP 5)

strtoupper将字符串转化为大写

说明

string strtoupper ( string $string )

string 中所有的字母字符转换为大写并返回。

注意 “字母” 与当前所在区域有关。例如,在默认的 “C” 区域,字符 umlaut-a(?)就不会被转换。

参数

string

输入字符串。

返回值

返回转换后的大写字符串。

范例

Example #1 strtoupper() 范例

<?php
$str 
"Mary Had A Little Lamb and She LOVED It So";
$str strtoupper($str);
echo 
$str// 打印 MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
?>

注释

Note: 此函数可安全用于二进制对象。

参见


字符串函数
在线手册:中文  英文

用户评论:

andre at koethur dot de (2013-06-10 08:28:03)

One might think that setting the correct locale would do the trick with for example german umlauts, but this is not the case. You have to use mb_strtoupper() instead:

<?php

setlocale
(LC_CTYPE'de_DE.UTF8');

echo 
strtoupper('Umlaute ??ü in uppercase'); // outputs "UMLAUTE ??ü IN UPPERCASE"
echo mb_strtoupper('Umlaute ??ü in uppercase''UTF-8'); // outputs "UMLAUTE ??? IN UPPERCASE"

?>

davaco at net dot hr (2012-01-06 07:46:12)

Simple function for uppercase encoding of croatian text! :)

<?php
function strtoupper_hr($a) {
    return 
strtr(mb_strtoupper($a"utf-8"), array(
      
" ?" => " ?",
      
" ?" => " ?",
      
" ?" => " ?",
      
" ?" => " ?",
      
" ?" => " ?"
    
));
}
?>

james at snasta dot ie (2011-11-10 06:44:06)

In the Irish language certain initial mutations can never be capitalized — the following simple function can be used to capitalize text in Irish.

i.e. Muintir na h?ireann -> MUINTIR NA h?IREANN

<?php
function strtoupper_ga($a) {
    return 
strtr(mb_strtoupper($a"utf-8"), array(
      
" MB" => " mB"
      
" GC" => " gC"
      
" ND" => " nD"
      
" BHF" => " bhF"
      
" NG" => " nG"
      
" BP" => " bP"
      
" DT" => " dT"
      
" HA" => " hA",
      
" HE" => " hE",
      
" HI" => " hI",
      
" HO" => " hO",
      
" HU" => " hU",
      
" H?" => " h?",
      
" H?" => " h?",
      
" H?" => " h?",
      
" H?" => " h?",
      
" H?" => " h?"
    
));
}
?>

markus dot geiger at mayflower dot de (2011-06-20 09:42:51)

NOTE: To uppercase a unicode string you simply could use mb_strtoupper($str, 'UTF-8') instead of all that bloated PHP functions ;=)

dev dot gabiu at gmail dot com (2011-05-17 04:22:24)

This would be my short version for French characters:

<?php
function fullUpper($string){
  return 
strtr(strtoupper($string), array(
      
"à" => "?",
      
"è" => "?",
      
"ì" => "?",
      
"ò" => "?",
      
"ù" => "?",
          
"á" => "?",
      
"é" => "?",
      
"í" => "?",
      
"ó" => "?",
      
"ú" => "?",
          
"?" => "?",
      
"ê" => "?",
      
"?" => "?",
      
"?" => "?",
      
"?" => "?",
          
"?" => "?",
    ));
}
?>

smieat (2010-05-01 16:39:39)

perfect solutions for turkish utf-8 (including i I conversations):

<?php
function strtolowertr($metin){
    return 
mb_convert_case(str_replace('I','?',$metin), MB_CASE_LOWER"UTF-8");
}

function 
strtouppertr($metin){
    return 
mb_convert_case(str_replace('i','?',$metin), MB_CASE_UPPER"UTF-8");
}

function 
ucwordstr($metin) {
    return 
ltrim(mb_convert_case(str_replace(array(' I',' ?'' ?'' i'),array(' I',' I',' ?',' ?'),' '.$metin), MB_CASE_TITLE"UTF-8"));
}

function 
ucfirsttr($metin) {
    
$metin in_array(crc32($metin[0]),array(1309403428, -797999993957143474)) ? array(strtouppertr(substr($metin,0,2)),substr($metin,2)) : array(strtouppertr($metin[0]),substr($metin,1));
return 
$metin[0].$metin[1];
}
?>

Jaason (2009-07-10 01:48:37)

convert polish special letters into big and small chars;p

<?php
function toUpper($string) {
    return (
strtoupper(strtr($string'?ó??????ń','?????????' )));
    };

function 
toLower($string) {
    return (
strtolower(strtr($string,'?????????''?ó??????ń' )));
    };
?>

chris at table4 dot com (2009-01-19 07:31:08)

Simple function to change the case of your string and any accented html characters contained within it. 

Inspired by fullUpper(), by silent at gmx dot li... just a little bit more atomic.

<?php

function convertCase($str$case 'upper')
//yours, courtesy of table4.com  :)
  
switch($case)
  {
    case 
"upper" :
    default:
      
$str strtoupper($str);
      
$pattern '/&([A-Z])(UML|ACUTE|CIRC|TILDE|RING|';
      
$pattern .= 'ELIG|GRAVE|SLASH|HORN|CEDIL|TH);/e';
      
$replace "'&'.'\\1'.strtolower('\\2').';'"//convert the important bit back to lower
    
break;
    
    case 
"lower" :
      
$str strtolower($str);
    break;
  }
  
  
$str preg_replace($pattern$replace$str);
  return 
$str;
}
?>

Depending on what you are trying to achieve you would call like this:

<?php

//with entities...
$str convertCase(htmlentities($strENT_QUOTES"ISO-8859-1"));

?>

spaceman at foo dot at (2008-04-17 09:59:56)

It has been mentioned in a previous comment that all you need to do to let PHP's strtoupper() do the conversion - instead of writing more or less complicated functions yourself - is to specify the locale in which you're doing the case conversion:

<?php setlocale(LC_CTYPE"de_AT"?>

It is important to note that setlocale() will silently fail if it can't find the specified locale on your system, so *always* check its return value. Try different spellings: using "de_AT" as an example, there are various combinations that may or may not work for you: "de", "de_AT.utf8", "de_AT.iso-8859-1", "de_AT.latin1", "de_AT@euro", etc).

If you can't find an appropriate locale setting, check your system configuration (locales are a system-wide setting, PHP gets them from the OS). On Windows, locales can be set from the Control Panel; on Linux it depends on your distribution. You can try "sudo dpkg-reconfigure locales" on Debian-based distros, or configure them manually. On Ubuntu Dapper, I had to copy entries over from /usr/share/i18n/SUPPORTED to /var/lib/locales/supported.d/local, then do the dpkg-reconfigure.

After you're done, restart the web server.

That said, there are special cases where you want to do the conversion manually. In German, for example, the letter '?' (szlig) only exists as a lower-case character, and so doesn't get converted by strtoupper. The convential way to express a '?' in an uppercase string is "SS". This function will take care of this exception (for Latin1 and most of Latin9, at least):

<?php

define
("LATIN1_UC_CHARS""?????????????????????????????");
define("LATIN1_LC_CHARS""àá??????èéê?ìí????òó????ùú?ü?");

function 
uc_latin1 ($str) {
    
$str strtoupper(strtr($strLATIN1_LC_CHARSLATIN1_UC_CHARS));
    return 
strtr($str, array("?" => "SS"));
}

?>

silent at gmx dot li (2007-10-15 05:25:02)

ISO-8859-1 (Latin 1) full with all special characters:

<?php
function fullUpper($str){
   
// convert to entities
   
$subject htmlentities($str,ENT_QUOTES);
   
$pattern '/&([a-z])(uml|acute|circ';
   
$pattern.= '|tilde|ring|elig|grave|slash|horn|cedil|th);/e';
   
$replace "'&'.strtoupper('\\1').'\\2'.';'";
   
$result preg_replace($pattern$replace$subject);
   
// convert from entities back to characters
   
$htmltable get_html_translation_table(HTML_ENTITIES);
   foreach(
$htmltable as $key => $value) {
      
$result ereg_replace(addslashes($value),$key,$result);
   }
   return(
strtoupper($result));
}

echo 
fullUpper("try this: ??ü?");
?>

results in

TRY THIS: ????

Oliv. (2007-10-11 07:20:53)

accents convertion trick :

<?php
        
    
function ucfirstHTMLentity($matches){
        return 
"&".ucfirst(strtolower($matches[1])).";";
    }
    function 
fullUpper($str){
        
$subject strtoupper(htmlentities($strnull'UTF-8'));
        
$pattern '/&([A-Z]+);/';
        return 
preg_replace_callback($pattern"ucfirstHTMLentity"$subject);
    }

        print 
fullUpper($_REQUEST["txt"]);
    
?>

xguimax at gmail dot com (2007-10-05 13:17:08)

Portuguese version of String Capitalize in PHP.
function strProper($str)
{
$noUp = array('um','uma','o','a','de','do','da','em');
$str = trim($str);
$str = strtoupper($str[0]) . strtolower(substr($str, 1));
for($i=1; $i<strlen($str)-1; ++$i) {
if($str[$i]==' ') {
for($j=$i+1; $j<strlen($str) && $str[$j]!=' '; ++$j); //find next space
$size = $j-$i-1;
$shortWord = false;
if($size<=3) {
$theWord = substr($str,$i+1,$size);
for($j=0; $j<count($noUp) && !$shortWord; ++$j)
if($theWord==$noUp[$j])
$shortWord = true;
}
if( !$shortWord )
$str = substr($str, 0, $i+1) . strtoupper($str[$i+1]) . substr($str, $i+2);
}
$i+=$size;
}
return $str;
}

RUNET (2007-04-17 17:33:35)

Russian
function str_to_upper($str){
return strtr($str,
"abcdefghijklmnopqrstuvwxyz".
"\xE0\xE1\xE2\xE3\xE4\xE5".
"\xb8\xe6\xe7\xe8\xe9\xea".
"\xeb\xeC\xeD\xeE\xeF\xf0".
"\xf1\xf2\xf3\xf4\xf5\xf6".
"\xf7\xf8\xf9\xfA\xfB\xfC".
"\xfD\xfE\xfF",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
"\xC0\xC1\xC2\xC3\xC4\xC5".
"\xA8\xC6\xC7\xC8\xC9\xCA".
"\xCB\xCC\xCD\xCE\xCF\xD0".
"\xD1\xD2\xD3\xD4\xD5\xD6".
"\xD7\xD8\xD9\xDA\xDB\xDC".
"\xDD\xDE\xDF");
}

bart at insane dot at (2006-05-10 04:31:01)

When using UTF-8 and need to convert to uppercase with
special characters like the german ?,?,ü (didn't test for french,polish,russian but think it should work, too) try this:
function strtoupper_utf8($string){
$string=utf8_decode($string);
$string=strtoupper($string);
$string=utf8_encode($string);
return $string;
}

Beniamin (2005-11-25 18:04:26)

Here is correct str2upper function for polish programmers (plus str2lower function):

<?php
function str2upper($text){
   return 
strtr($text,
   
"abcdefghijklmnopqrstuvwxyz".
   
"\xB1\xE6\xEA\xB3\xF1\xF3\xB6\xBC\xBF"// ISO 8859-2
   
"\xB9\x9C\x9F"// win 1250
   
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
   
"\xA1\xC6\xCA\xA3\xD1\xD3\xA6\xAC\xAF"// ISO 8859-2
   
"\xA5\x8C\x8F"  // win 1250
   
);


function 
str2lower($text){
   return 
strtr($text,
   
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
   
"\xA1\xC6\xCA\xA3\xD1\xD3\xA6\xAC\xAF"// ISO 8859-2
   
"\xA5\x8C\x8F",  // win 1250
   
"abcdefghijklmnopqrstuvwxyz".
   
"\xB1\xE6\xEA\xB3\xF1\xF3\xB6\xBC\xBF"// ISO 8859-2
   
"\xB9\x9C\x9F" // win 1250
   
);
}
?>

(2005-05-30 06:11:25)

// 2005/5/30 Justin
// Chinese_Traditional toupper
function CT_to_upper($string)
{
$isChineseStart = false;

$new_string = "";
$i = 0;
while($i < strlen($string))
{
if (ord(substr($string,$i,1)) <128)
{
if( $isChineseStart == false )
$new_string .= strtoupper(mb_substr($string,$i,1));
else
$new_string .= substr($string,$i,1);
}
else
{
if( $isChineseStart == false )
$isChineseStart = true;
else
$isChineseStart = false;

$new_string .= substr($string,$i,1);
}
$i++;
}
return $new_string;
}
//

Justin_Lin at mail2000 dot com dot tw (2005-05-30 06:09:18)

The following is my code for translate a given string to upper case and it will support chinese traditional :
// 2005/5/30 Justin
// Chinese_Traditional toupper
function CT_to_upper($string)
{
$isChineseStart = false;

$new_string = "";
$i = 0;
while($i < strlen($string))
{
if (ord(substr($string,$i,1)) <128)
{
if( $isChineseStart == false )
$new_string .= strtoupper(mb_substr($string,$i,1));
else
$new_string .= substr($string,$i,1);
}
else
{
if( $isChineseStart == false )
$isChineseStart = true;
else
$isChineseStart = false;
$new_string .= substr($string,$i,1);
}
$i++;
}
return $new_string;
}
//

willyann at gmail dot com (2005-05-24 21:31:39)

chinese
function to_upper($string) {
$new_string = "";
$i = 0;
while($i < strlen($string)) {
if (ord(substr($string,$i,1)) <128)
{
$new_string .= strtoupper(substr($string,$i,1));
$i++;
} else {
$new_string .= substr($string,$i,2);
$i=$i+2;
}
}
return $new_string;
}

(2004-10-30 15:23:18)

If you only need to extend the conversion by the characters of a certain language, it's possible to control this using an environment variable to change the locale:
setlocale(LC_CTYPE, "de_DE");

martine (2004-02-06 19:41:28)

mec at stadeleck dot org (2002-12-02 06:54:33)

something I myself first not thought about:
if there are any html entities (named entities) in your string, strtoupper will turn all letters within this entities to upper case, too. So if you want to manipulate a string with strtoupper it should contain only unicode entities (if ever).

urudz at strategma dot bg (2002-04-21 09:49:26)

on linux
php gets LC_LOCAL env variable therefor you must set this
export LC_ALL=bg_BG.CP1251
export LANG=bg_BG.CP1251
before starting of apache i have put this to lines in /etc/rc.d/rc.httpd
-----
cat /etc/rc.d/rc.httpd
#!/bin/sh
#
# Start the Apache web server
#
export LC_ALL=bg_BG.CP1251
export LANG=bg_BG.CP1251
case "$1" in
'start')
/usr/sbin/apachectl startssl ;;
'stop')
/usr/sbin/apachectl stop ;;
'restart')
/usr/sbin/apachectl restart ;;
*)
echo "usage $0 start|stop|restart" ;;
esac
-------
in windows you must define your "locale"
in control panel > regional options > general
best regards urudz :>

易百教程