标准的 strtolower 和 strtoupper 函数仅支持 ASCII 字符。当处理如 UTF-8 编码的字符时,它们无法正确转换非英文字符。例如:
$text = "Γει? Σου Κ?σμε"; // 希腊语
echo strtoupper($text); // 输出可能不正确
此时就需要 mb_convert_case:
$text = "Γει? Σου Κ?σμε";
echo mb_convert_case($text, MB_CASE_UPPER, "UTF-8"); // 正确转换为大写
mb_convert_case 的函数原型如下:
string mb_convert_case(string $string, int $mode, ?string $encoding = null)
$string:要转换的字符串。
$mode:转换模式,主要有:
MB_CASE_UPPER:转为大写
MB_CASE_LOWER:转为小写
MB_CASE_TITLE:每个单词首字母大写
$encoding:字符编码(如 UTF-8、GBK),如果不指定,默认使用 mb_internal_encoding()。
很多时候,开发者忽略了编码参数,导致转换结果不对。建议始终明确写出编码:
$text = "na?ve fa?ade résumé";
echo mb_convert_case($text, MB_CASE_UPPER, 'UTF-8');
输出:NA?VE FA?ADE RéSUMé
mb_convert_case 并不会改变中文字符的状态(因为中文没有大小写)。但你依然需要设置 UTF-8 编码,否则可能会截断字符串。
$text = "你好 World";
echo mb_convert_case($text, MB_CASE_UPPER, 'UTF-8'); // 输出:你好 WORLD
适用于处理文章标题、新闻标题等:
$title = "le petit prince";
echo mb_convert_case($title, MB_CASE_TITLE, 'UTF-8'); // Le Petit Prince
如果文本中有 HTML 标签或实体,请先去除或做适当处理,否则会影响输出。
$name = trim($_POST['name']);
$cleaned = mb_convert_case($name, MB_CASE_TITLE, 'UTF-8');
确保用户输入在界面展示时具有一致的格式,尤其是用于证件名、标题栏等。
假设你需要将用户资料中的姓名字段格式化展示,且支持多语言输入:
function formatUserName($name) {
return mb_convert_case(trim($name), MB_CASE_TITLE, 'UTF-8');
}
echo formatUserName("éMILIE du chatelet"); // émilie Du Chatelet
你也可以将该功能封装在 API 接口中,对返回的 JSON 数据统一进行格式规范化,示例如下:
header('Content-Type: application/json');
$data = [
'name' => mb_convert_case('sErGiO péRez', MB_CASE_TITLE, 'UTF-8'),
'profile_url' => 'https://gitbox.net/user/sergioperez'
];
echo json_encode($data);