PHP Conference Japan 2024

strtoupper

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

strtoupper将字符串转换为大写

描述

strtoupper(string $string): string

返回将所有 ASCII 字母字符转换为大写的 string

范围在 "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 条注释

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"

?>
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"));
}

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

setlocale(LC_CTYPE, "de_DE");
mec at stadeleck dot org
22 年前
我自己一开始没有想到的事情
如果您的字符串中存在任何 HTML 实体(命名实体),strtoupper 也会将这些实体中的所有字母都转换为大写。因此,如果您想使用 strtoupper 操作字符串,则它应该只包含 Unicode 实体(如果有的话)。
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
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Ú"
));
}
?>
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;
}
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];
}
?>
Anonymous
19 年前
// 2005/5/30 Justin
// 繁体中文 to_upper
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;
}
//
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"));

?>
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");
}
chris at ocproducts dot com
5 年前
此函数在处理土耳其语时面临真正的挑战。在土耳其语中,ASCII 字母“i”大写为非 ASCII 字符。这意味着 PHP 无法将其大写。

例如,对于土耳其语言环境,strtoupper('i')=='i'

这可能会破坏基本程序逻辑。

没有简单的解决方案。核心问题在此处进行了更详细的讨论
http://www.i18nguy.com/unicode/turkish-i18n.html
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;
}
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