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自带的函数, 支持多语言, 每个字(不论哪种鸟文)都算作一个长度.

 

php截取字符串方法, 让英文,中文,中英文混合差不多长,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。