PHP内置大小写转换函数如strtolower、strtoupper、ucfirst、ucwords及多字节安全的mb_strtolower/mb_strtoupper,高效支持Unicode;禁用ASCII加减法因不兼容非英文、多字节字符及特殊语言规则。

PHP 提供了多个内置函数来处理字符串大小写转换,无需手动实现底层算法,但理解其原理和适用场景很重要。
常用大小写转换函数
PHP 标准库已封装成熟、高效、符合 Unicode 规范的转换逻辑:
-
strtolower($str):将字符串全部转为小写,适用于 ASCII 和大多数 UTF-8 字符(需确保
mbstring扩展启用并设置正确 locale) -
strtoupper($str):全部转为大写,行为类似
strtolower - ucfirst($str):仅首字母大写,其余不变
- ucwords($str):每个单词首字母大写(按空格分隔)
- mb_strtolower($str, 'UTF-8') 和 mb_strtoupper($str, 'UTF-8'):多字节安全版本,推荐用于含中文、俄文、希腊字母等非 ASCII 文本
为什么不能简单用 ASCII 加减?
直接对字符 ASCII 值加减 32(如 ord($c) + 32)只对纯英文有效,且易出错:
- 非字母字符(数字、标点、汉字)会被错误修改
- 不同编码下字母范围不同(如 UTF-8 中一个汉字占 3 字节,无法单字节操作)
- 某些语言有特殊规则(如土耳其语中
I的小写是ı,不是i),PHP 的mb_*函数可配合setlocale()或 ICU 支持处理
自定义转换(仅限特定需求)
若需按规则翻转大小写(如大写变小写、小写变大写、其余不变),可用 preg_replace_callback:
立即学习“PHP免费学习笔记(深入)”;
$str = "Hello 世界123!";
$result = preg_replace_callback('/[a-zA-Z]/', function($m) {
$c = $m[0];
return ctype_lower($c) ? strtoupper($c) : strtolower($c);
}, $str);
// 结果:"hELLO 世界123!"
注意:该方式不处理多字节字符;如需支持中文环境中的英文字母翻转,仍应结合 mb_substr 和 mb_ereg_match 或改用 IntlChar 类(PHP 7.4+)。
性能与编码注意事项
实际开发中应优先使用内置函数:
-
strtolower/strtoupper比循环 +ord/chr快 5–10 倍以上 - 务必确认脚本文件、数据库连接、HTTP 响应均使用 UTF-8 编码
- 在多语言项目中,默认启用
mbstring.func_overload不再推荐,显式调用mb_*更清晰可控











