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);