之前在遇到这个事情的时候 在网上搜了一个方法来解决. 循环字符串中的每一个字符, 再去计算出整个的长度来截取.
效果是可以达到的, 但是效率不高...
公司某高人写了个函数, 解决了这个问题.
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自带的函数, 支持多语言, 每个字(不论哪种鸟文)都算作一个长度.