网上流传很多关于中文截取的代码,但实现效果均不理想!表现如下
- 截取结果的长度不正确。
- 用循环来逐字截取,效率太底,不是明智之举。
顾自己写了一个现来分享一下:
/* Author: Jay
* e-mail: warcanfeng@126.com
* QQ:308733259
* Function: 中文截取
* @Param $String string 待截取的文本
* @Param $Len int 截取的长度
* Retrun string
*/
function expSubstr($String = '', $Len = '') {
if(!$String) return false;
if($Len) {
$strTemp = preg_replace("/[^/x80-/xff]{1}/s", 0, $String);
$strTemp = preg_replace("/[/x80-/xff]{2}/s" , 1, $strTemp);
//echo $strTemp.'< >';
$temp = substr($strTemp, 0, (int)$Len);
$realLen = substr_count($temp, 1);
if($realLen) $Len += $realLen;
return substr($String, 0, (int)$Len);
}
return $String;
}
/** TEST **/
$str = "中111110,,,?,,fdsaf中文1你111我1他1";
echo expSubStr($str, 10);
按位选择部分由于暂无这方面需求顾未写上去~ 有需求者可以加以改造。
如有更好的实现方法或发现BUG的请通知一下小弟! 欢迎加QQ成为好友