在PHP 中處理多字節字符串(如中文、日文、韓文等)時,使用標準的字符串函數(如strlen )往往會導致意想不到的結果。因為這些函數是以字節為單位進行計算,而不是以字符為單位。這時候,我們就需要藉助PHP 的Multibyte String 擴展(mbstring)中的函數,如mb_strlen和mb_get_info來實現更精確的字符串操作。
本文將帶你了解mb_strlen和mb_get_info的基本用法,並通過實例說明它們如何幫助你準確檢測多字節字符串的長度。
先看一個簡單例子:
$str = "你好,世界";
echo strlen($str); // 輸出:15
這個字符串明明只有5 個漢字(包含逗號),卻返回了15。這是因為在UTF-8 編碼下,一個漢字通常佔用3 個字節。 strlen統計的是“字節數”,而不是“字符數”。
如果我們要得到真正的字符數,應該使用mb_strlen :
echo mb_strlen($str); // 輸出:5
這樣我們才得到了正確的字符數量。
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可以幫助你了解當前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");