strtoupper

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

strtoupper将字符串转换为大写

说明

参数

字符串

输入字符串。

返回值

返回大写字符串。

变更日志

版本 说明
8.2.0 大小写转换不再依赖使用 setlocale() 设置的区域设置。仅转换 ASCII 字符。

示例

示例 #1 strtoupper() 示例

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

备注

备注: 此函数是二进制安全的。

另请参阅

添加备注

用户贡献的备注 16 备注

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"

?>
匿名
19 年前
如果您只需要通过特定语言的字符扩展转换,可以使用环境变量来控制此转换,以更改区域设置

setlocale(LC_CTYPE, "de_DE");
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。

完成之后,请重新启动 Web 服务器。

话虽如此,在某些特殊情况下,您需要手动执行转换。例如,在德语中,字母“ß”(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"));
}

?>
uilmind at favor.com.ua
8 年前
以下是将字符置于大写的方式,除了 HTML 实体

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

然而,存在一个小偏差。不幸的是,我尝试找出一种方法来排除行首的 HTML 实体,因此我在文本开头添加了 1 个哑字符,并在转换后将其删除。
james at snasta dot ie
12 年前
在爱尔兰语中,某些初始变体永远不能大写;可以使用以下简单函数来大写爱尔兰语中的文本。

例如,Muintir na hÉireann -> MUINTIR NA hÉIREANN

<?php
函数 strtoupper_ga($a) {
返回
strtr(mb_strtoupper($a, "utf-8"), 数组(
" 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Ú"
));
}
?>
mec at stadeleck dot org
21 年前
我自己首先没有想到
如果你的字符串中有任何 html 实体(已命名实体),strtoupper 也会将所有这些实体内的字母全部转换为大写。所以,如果你想用 strtoupper 控制一个字符串,它应该只包含 Unicode 实体(如果存在的话)。
bart at insane dot at
18 年前
在使用 UTF-8 并且需要将以下字符转换为大写时
特殊字符,如德语中的 ä、ö、ü(未针对法语、波兰语、俄语测试,但认为它应该同样适用)试试这个

function strtoupper_utf8($string){
$string=utf8_decode($string);
$string=strtoupper($string);
$string=utf8_encode($string);
返回 $string;
}
smieat
14 年前
土耳其语 utf-8 的完美解决方案(包括 i I 转换)

<?php
函数 strtolowertr($metin){
返回
mb_convert_case(str_replace('I','ı',$metin), MB_CASE_LOWER, "UTF-8");
}

函数
strtouppertr($metin){
返回
mb_convert_case(str_replace('i','İ',$metin), MB_CASE_UPPER, "UTF-8");
}

函数
ucwordstr($metin) {
返回
ltrim(mb_convert_case(str_replace(数组(' I',' ı', ' İ', ' i'),数组(' I',' I',' İ',' İ'),' '.$metin), MB_CASE_TITLE, "UTF-8"));
}

函数
ucfirsttr($metin) {
$metin = in_array(crc32($metin[0]),数组(1309403428, -797999993, 957143474)) ? 数组(strtouppertr(substr($metin,0,2)),substr($metin,2)) : 数组(strtouppertr($metin[0]),substr($metin,1));
返回
$metin[0].$metin[1];
}
?>
Anonymous
19 年前
// 2005/5/30 Justin
// Chinese_Traditional toupper
函数 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;
}
//
chris at ocproducts dot com
5 年前
对于土耳其语,此函数面临真正的挑战。土耳其语中的 ASCII 字符“i”大写后会变成一个非 ASCII 字符。这意味着 PHP 无法对其进行大写。

即对于土耳其语区域设置,strtoupper('i')=='i'

这可能会影响基本程序逻辑。

没有简单的解决方案。有关核心问题的更多讨论请参见此处
http://www.i18nguy.com/unicode/turkish-i18n.html
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");
}
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
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;
}
chris at table4 dot com
15 年前
一个简单的函数,用于改变字符串的大小写以及其中包含的任何重音 HTML 字符的大小写。

灵感来自 silent at gmx dot li 的 fullUpper() 函数,只是更加原子化。

<?php

函數 convertCase($str, $case = 'upper')
{
//感謝 table4.com 提供的禮儀 :)
switch($case)
{
情況
"upper" :
默認:
$str = strtoupper($str);
$pattern = '/&([A-Z])(UML|ACUTE|CIRC|TILDE|RING|';
$pattern .= 'ELIG|GRAVE|SLASH|HORN|CEDIL|TH);/e';
$replace = "'&'.'\\1'.strtolower('\\2').';'"; //將重要的位元轉換回小寫
斷開;

情況
"lower" :
$str = strtolower($str);
斷開;
}

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

根據你試圖達成的目標,你可以用以下方式呼叫

<?php

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

?>
Oliv.
16 年前
變音符換位技巧

<?php

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

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

?>
戴夫
6 年前
我不知道为什么这个函数不直接命名为“大写”或具有该别名。
To Top