當前位置: 首頁> 最新文章列表> 如何結合mb_get_info 與mb_strlen 進行字符串長度檢測

如何結合mb_get_info 與mb_strlen 進行字符串長度檢測

gitbox 2025-05-11

在PHP 中處理多字節字符串(如中文、日文、韓文等)時,使用標準的字符串函數(如strlen )往往會導致意想不到的結果。因為這些函數是以字節為單位進行計算,而不是以字符為單位。這時候,我們就需要藉助PHP 的Multibyte String 擴展(mbstring)中的函數,如mb_strlenmb_get_info來實現更精確的字符串操作。

本文將帶你了解mb_strlenmb_get_info的基本用法,並通過實例說明它們如何幫助你準確檢測多字節字符串的長度。

一、為什麼不能直接用strlen

先看一個簡單例子:

 $str = "你好,世界";
echo strlen($str);  // 輸出:15

這個字符串明明只有5 個漢字(包含逗號),卻返回了15。這是因為在UTF-8 編碼下,一個漢字通常佔用3 個字節。 strlen統計的是“字節數”,而不是“字符數”。

如果我們要得到真正的字符數,應該使用mb_strlen

 echo mb_strlen($str);  // 輸出:5

這樣我們才得到了正確的字符數量。

二、使用mb_strlen精確計算字符長度

mb_strlen是專門為多字節字符設計的函數,語法如下:

 int mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
  • $str :要測量長度的字符串

  • $encoding :可選,指定編碼類型,默認使用mb_internal_encoding()返回的編碼

示例:

 $str = "歡迎訪問 https://gitbox.net";
$length = mb_strlen($str, 'UTF-8');
echo "字符長度為:$length";

輸出:

 字符長度為:18

這會正確統計中文和英文混合字符串中的“字符數”,而不是字節數。

三、如何使用mb_get_info獲取編碼信息?

mb_get_info可以幫助你了解當前mbstring 配置,尤其是內部編碼方式:

 $info = mb_get_info();
print_r($info);

輸出示例:

 Array
(
    [internal_encoding] => UTF-8
    [http_input] => pass
    [http_output] => pass
    [language] => neutral
    [encoding_translation] => 0
    ...
)

這告訴我們當前使用的是UTF-8 編碼。如果你發現mb_strlen計算結果不准確,檢查一下內部編碼是否設置正確是很有幫助的。

你也可以指定返回特定的信息:

 echo mb_get_info("internal_encoding");  // 輸出:UTF-8

四、建議:設置默認編碼

為避免問題,建議在腳本開頭設置默認的多字節編碼:

 mb_internal_encoding("UTF-8");

這樣可以確保mb_strlenmb_substr等函數都按UTF-8 編碼來處理字符串。