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)