php截取字符串方法, 让英文,中文,中英文混合差不多长

之前在遇到这个事情的时候  在网上搜了一个方法来解决. 循环字符串中的每一个字符, 再去计算出整个的长度来截取.

效果是可以达到的, 但是效率不高...

公司某高人写了个函数, 解决了这个问题.

 1 /*

 2  * functions for limiting maximal text length

 3 */

 4 function strmaxtextlen($input, $len = 60) {

 5    $bytelen = mb_strlen($input, 'ASCII');

 6    $strlen = JString::strlen($input);  

 7            

 8    if($bytelen == $strlen) {

 9       /* only ascii. Most utf-8 chars are 3 bytes long, so we can cut at least 2 times of $len */

10       if($bytelen > 2* $len)

11          return mb_strcut($input, 0, 2 * $len)."...";

12    }

13    else {

14       /* either mixed or only multiple-byte chars, we cut x times of $len */

15       $rlen = $bytelen/$strlen;       

16       if($bytelen > $rlen * $len)

17          return mb_strcut($input, 0, $rlen * $len)."...";

18    }

19               

20    return $input;

21 }

JString::strlen是joomla自带的函数, 支持多语言, 每个字(不论哪种鸟文)都算作一个长度.

 

你可能感兴趣的:(截取字符串)