2014
May
28
在製作網頁文字功能時,你一定常常聽到 PM 要求某個區塊要顯示 100 個字,而且一個中文字要等於兩個英文字,也就是說 40 (40x2)個中文字加上 20 個英文字,就會剛好等於 100 個字的需求,PHP 內建沒有提供相關的 function 來做這件事,於是我寫了一個簡單的 Function 來處理這項需求。
程式會先利用 mb_substr 這個處理 MultiByte 的 function 來將所有的字母切開,然後再用 substr 來分辨英文與中文字,因為中文與英文字在 MultiByte 計算長度時,長度都會等於 1 , 所以可以正確的切出每一個字母,當我再用 substr 來計算時,中文字的 Byte 數會大於 1,而英文字的 Byte 數會等於 1。
全部的程式碼如下
Example
- function cutString($string, $max = 25) {
- $strlen = mb_strlen($string, 'UTF-8');
- $cutLen = 0;
- $retval = "";
- for ($i = 0; $i < $strlen; $i++) {
- $s = mb_substr($string, $i, 1, 'UTF-8');
- if (strlen($s) == 1) {
- $cutLen++;
- } else {
- $cutLen += 2;
- }
- $retval .= $s;
- if ($cutLen >= $max) {
- return $retval;
- }
- }
- return $retval;
- }
- cutString("Iphone 手機 16G ....", 30);