PHP Conference Japan 2024

strtoupper

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

strtoupper將字串轉換為大寫

說明

strtoupper(string $string): string

傳回 string,其中所有 ASCII 字母字元都已轉換為大寫。

範圍在 "a" (0x61) 到 "z" (0x7a) 的位元組將透過從每個位元組值減去 32 來轉換為對應的大寫字母。

這可用於轉換以 UTF-8 編碼的字串中的 ASCII 字元,因為會忽略多位元組 UTF-8 字元。若要轉換多位元組非 ASCII 字元,請使用 mb_strtoupper()

參數

string

輸入字串。

傳回值

傳回大寫字串。

變更日誌

版本 說明
8.2.0 大小寫轉換不再取決於使用 setlocale() 設定的地區設定。只會轉換 ASCII 字元。

範例

範例 #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
?>

注意事項

注意此函式為二進位安全。

參見

新增註解

使用者貢獻的註解 14 則註解

52
andre at koethur dot de
11 年前
可能會認為設定正確的地區設定可以使用德文變音符號等技巧,但情況並非如此。您必須改用 mb_strtoupper()

<?php

setlocale
(LC_CTYPE, 'de_DE.UTF8');

echo
strtoupper('Umlaute äöü in uppercase'); // 輸出 "UMLAUTE äöü IN UPPERCASE"
echo mb_strtoupper('Umlaute äöü in uppercase', 'UTF-8'); // 輸出 "UMLAUTE ÄÖÜ IN UPPERCASE"

?>
3
spaceman at foo dot at
16 年前
在先前的註解中已提到,您只需要做的是指定要進行大小寫轉換的地區設定,就可以讓 PHP 的 strtoupper() 執行轉換,而不是自行撰寫或多或少複雜的函式

<?php setlocale(LC_CTYPE, "de_AT") ?>

請務必注意,如果 setlocale() 在您的系統上找不到指定的地區設定,則會靜默失敗,因此 *請務必* 檢查其傳回值。嘗試不同的拼寫:以 "de_AT" 為例,有各種組合可能會或可能無法運作:"de"、"de_AT.utf8"、"de_AT.iso-8859-1"、"de_AT.latin1"、"de_AT@euro" 等)。

如果您找不到適當的地區設定,請檢查您的系統組態(地區設定是全系統設定,PHP 從作業系統取得)。在 Windows 上,可以從控制台設定地區設定;在 Linux 上,則取決於您的發行版。您可以在以 Debian 為基礎的發行版上嘗試 "sudo dpkg-reconfigure locales",或手動設定它們。在 Ubuntu Dapper 上,我必須將項目從 /usr/share/i18n/SUPPORTED 複製到 /var/lib/locales/supported.d/local,然後執行 dpkg-reconfigure。

完成後,請重新啟動網頁伺服器。

也就是說,在某些特殊情況下,您會想要手動執行轉換。例如,在德文中,字母 'ß' (szlig) 僅以小寫字元存在,因此不會被 strtoupper 轉換。在一個大寫字串中表達 'ß' 的傳統方式是 "SS"。此函式將處理此例外情況(至少對於 Latin1 和大多數 Latin9 而言)

<?php

define
("LATIN1_UC_CHARS", "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ");
define("LATIN1_LC_CHARS", "àáâãäåæçèéêëìíîïðñòóôõöøùúûüý");

function
uc_latin1 ($str) {
$str = strtoupper(strtr($str, LATIN1_LC_CHARS, LATIN1_UC_CHARS));
return
strtr($str, array("ß" => "SS"));
}

?>
3
匿名
20 年前
如果您只需要將轉換擴展到特定語言的字元,可以使用環境變數來變更地區設定來控制此行為

setlocale(LC_CTYPE, "de_DE");
2
mec at stadeleck dot org
22 年前
我自己一開始沒想到的事情
如果您的字串中有任何 html 實體(具名實體),strtoupper 也會將這些實體中的所有字母轉換為大寫。因此,如果您想要使用 strtoupper 操作字串,則應只包含 Unicode 實體(如果有的話)。
0
uilmind at favor.com.ua
8 年前
以下說明如何將字元轉換為大寫,但 HTML 實體除外

$s = substr(preg_replace('/(?<=^|;)(.+?)(?=&[0-9A-Za-z]+;|$)/e', "strtoupper('$1')", ' '.$s), 1);

不過,這裡有個小技巧。不幸的是,我試圖找出如何在行首排除 HTML 實體的方法,所以我先在文字開頭加入一個虛擬字元,然後在轉換後將其移除。
0
james at snasta dot ie
13 年前
在愛爾蘭語中,某些起始的子音變異永遠不能大寫 — 以下的簡單函式可以用於將愛爾蘭語的文字轉換為大寫。

例如: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Ú"
));
}
?>
0
bart at insane dot at
18 年前
當使用 UTF-8 並且需要將文字轉換為大寫時,
對於像德語的 ä,ö,ü 這樣的特殊字元 (我沒有測試法語、波蘭語、俄語,但認為它也應該可行),請嘗試這個方法

function strtoupper_utf8($string){
$string=utf8_decode($string);
$string=strtoupper($string);
$string=utf8_encode($string);
return $string;
}
-1
smieat
14 年前
土耳其語 utf-8 的完美解決方案 (包括 i 和 I 的轉換)

<?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, -797999993, 957143474)) ? array(strtouppertr(substr($metin,0,2)),substr($metin,2)) : array(strtouppertr($metin[0]),substr($metin,1));
return
$metin[0].$metin[1];
}
?>
-2
Anonymous
19 年前
// 2005/5/30 Justin
// 中文(繁體)轉大寫
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;
}
//
-2
chris at table4 dot com
15 年前
一個簡單的函式,用於更改字串的大小寫以及其中包含的任何帶重音符號的 HTML 字元。

靈感來自 silent at gmx dot li 的 fullUpper() ... 只是稍微更原子化。

<?php

function convertCase($str, $case = 'upper')
{
//你的,由 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').';'"; //將重要的部分轉換回小寫
break;

case
"lower" :
$str = strtolower($str);
break;
}

$str = preg_replace($pattern, $replace, $str);
return
$str;
}
?>

根據您嘗試實現的目標,您可以這樣呼叫它

<?php

//帶有實體...
$str = convertCase(htmlentities($str, ENT_QUOTES, "ISO-8859-1"));

?>
-4
RUNET
17 年前
俄文

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");
}
-2
chris at ocproducts dot com
5 年前
這個函式在處理土耳其語時會遇到真正的挑戰。在土耳其語中,ASCII 字母 'i' 大寫會變成非 ASCII 字元。這表示 PHP 無法將其轉換為大寫。

例如,對於土耳其語地區設定,strtoupper('i')=='i'

這可能會擾亂基本的程式邏輯。

沒有簡單的解決方案。這裡有更多關於核心問題的討論
http://www.i18nguy.com/unicode/turkish-i18n.html
-3
willyann at gmail dot com
19 年前
中文

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;
}
-3
adriaanse06 at hotmail dot com
9 年前
$ther=''.THEREISALREADYA.' '.CONCEPT.' '.SAVED.' ';

$ther="There Is all ready A concept SAVED";

$fupper=substr("$ther",0,1);
選取第一個字元

$theru = strtoupper($fupper);
將其轉換為大寫

$flower=substr("$ther",1,100);
選取其餘部分

$therl = strtolower($flower);
將它們轉換為小寫

結果
There is all ready a concept saved
To Top