[PHP] strlen()、mb_strlen() 計算 字串長度

strlen

strlen() 是在PHP之中,當你需要查詢一個字串的長度時很簡單好用的一個指令,而與這條指令相似的是mb_strlen(),這兩條指令對於字串長度的計算標準有一些不太一樣,它們分別計算的是「字元」與「字串」,這個差異主要出現在使用全形字體的時候會顯著的產生差異,例如在utf8的模式下中文字是3個字元,以下會詳細的示範相關的差異與使用方式,在按照實際需求衡量一下應該要使用哪一條指令囉!

strlen()

strlen($字串); //回傳值為 int

strlen() 統計的是這個字串的字元數,在標準半形字體上來說都是一個字母代表一個字元,但是如果這個時候輸入的字串包含全形字體(例如中文、或全形標點符號),那麼全形所輸出的部分通常就是3個字元。

mb_strlen()

mb_strlen($字串); //回傳值為 int

mb_strlen() 相較於 strlen() 的最大不同在於,這個指令回傳的是輸入字串的字數,確實就是依照一個一個字來計算,包含半形或全形都計一個字,所以當你要輸入一串完整的字串並且其中可能包含中文與英文時,你就必須要使用mb_strlen()來計算它的實際字數。


完整範例:

接下來我們實際來演練看看關於strlen與mb_strlen的幾個簡單範例,就可以更清楚得知它們的差異了!

$text_1 = "abc";
$text_2 = "中文";
$text_3 = "Hello World! 你好世界!";
$text_4 = " "; // 單純一個空格

echo strlen($text_1); // Ans: 3
echo strlen($text_2); // Ans: 6
echo strlen($text_3); // Ans: 28
echo strlen($text_4); // Ans: 1 
echo mb_strlen($text_1); // Ans: 3
echo mb_strlen($text_2); // Ans: 2
echo mb_strlen($text_3); // Ans: 18
echo mb_strlen($text_4); // Ans: 1

由以上的範例我們就可以得知,在整個字串都是半形字元的情況下計算結果是一致的,但是如果出現中文或是全形的符號,就會展現出不同的差異了。

如果你計算長度是為了視覺上的效果那麼你應該要使用stelrn來判斷字元長度,因為這直接實際的反應了整串字串的真實寬度。

如果你計算長度是為了要判斷字數是否充足或過多,那麼你要用的就是mb_strlen來判斷字數,它便可以同時判斷全形與半形的字數,來達到判斷的效果。

☆ 如果空格或是標點符號是全形的,則計算的位元將會與一般的中文字一樣為全形的3個字元哦!

 

參考資料:

PHP.net strlen() (https://www.php.net/manual/en/function.strlen.php)
PHP.net mb_strlen() (https://www.php.net/manual/en/function.mb-strlen)

更多PHP相關閱讀:https://richarlin.tw/blog/category/website/php/

Facebook 留言回應