项目中遇到这么个需求,截取中英文字符串,一个中文相当于2个英文,全英文时截取12个英文字母,全中文时是6个中文汉字,中英文混合时是12个字节,在网上有找到这样的解决方案,但我没能静下心来研究懂,于是自己根据他的启发写了个方法,如下所示:
网上找到的解决方案:http://waiting.iteye.com/blog/581888
<?php /** * 中英文混截 * @param type $str 需要截取的字符串 * @param type $width 需要截取的长度 * @param type $end 超过截取长度的部分代替字符串 * @param type $equto 一个中文等价于几个字节 * @return string 新字符串 */ public function str_substr($str, $width, $end = '...', $equto = 2) { $arr = []; //使用mb_strlen获取字符串长度,mb_substr截取字符串 $len = mb_strlen($str); for($m = 0; $m<$len; $m++) { $arr[] = mb_substr($str, $m, 1); } $newStr = ''; $newlen = 0; for($i=0; $i<count($arr); $i++) { if($newlen < $width) { if(mb_strlen($arr[$i]) == strlen($arr[$i])) { $newStr .= $arr[$i]; $newlen += 1; }else { $newStr .= $arr[$i]; $newlen += $equto*1; } } } if($len > $width) { $newStr .= $end; } return $newStr; }