當前位置: 首頁> 最新文章列表> 如何在mb_convert_case中處理多字節字符集(如UTF-8)

如何在mb_convert_case中處理多字節字符集(如UTF-8)

gitbox 2025-05-29

為什麼要使用mb_convert_case而不是strtolowerstrtoupper

標準的strtolowerstrtoupper函數僅支持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()


實戰技巧分享

1. 明確指定編碼

很多時候,開發者忽略了編碼參數,導致轉換結果不對。建議始終明確寫出編碼:

 $text = "na?ve fa?ade résumé";
echo mb_convert_case($text, MB_CASE_UPPER, 'UTF-8');

輸出: NA?VE FA?ADE RéSUMé

2. 如何處理中文?

mb_convert_case並不會改變中文字符的狀態(因為中文沒有大小寫)。但你依然需要設置UTF-8 編碼,否則可能會截斷字符串。

 $text = "你好 World";
echo mb_convert_case($text, MB_CASE_UPPER, 'UTF-8'); // 輸出:你好 WORLD

3. 首字母大寫(標題格式)

適用於處理文章標題、新聞標題等:

 $title = "le petit prince";
echo mb_convert_case($title, MB_CASE_TITLE, 'UTF-8'); // Le Petit Prince

如果文本中有HTML 標籤或實體,請先去除或做適當處理,否則會影響輸出。

4. 配合表單數據清洗使用

$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);