標準的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);