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
  1. function cutString($string, $max = 25) {
  2. $strlen = mb_strlen($string, 'UTF-8');
  3. $cutLen = 0;
  4. $retval = "";
  5. for ($i = 0; $i < $strlen; $i++) {
  6. $s = mb_substr($string, $i, 1, 'UTF-8');
  7. if (strlen($s) == 1) {
  8. $cutLen++;
  9. } else {
  10. $cutLen += 2;
  11. }
  12. $retval .= $s;
  13. if ($cutLen >= $max) {
  14. return $retval;
  15. }
  16. }
  17.  
  18. return $retval;
  19. }
  20.  
  21. cutString("Iphone 手機 16G ....", 30);

回應 (Leave a comment)