1. 程式人生 > 實用技巧 >php擷取包含中英文的字串固定長度

php擷取包含中英文的字串固定長度

我們經常會遇到需要擷取字串(含中文漢字)長度的情況,比如標題顯示不能超過多少字元,超出的長度用…表示,以下函式可以滿足你的需求。

/*
Utf-8、gb2312都支援的漢字擷取函式
cut_str(字串,擷取長度,開始長度,編碼);
編碼預設為utf-8
開始長度預設為0
*/
functioncutStr($string,$sublen,$start=0,$code='UTF-8'){
if($code=='UTF-8'){
$pa="/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa,$string,$t_string);

if(count($t_string[0])-$start>$sublen)returnjoin('',array_slice($t_string[0],$start,$sublen))."...";
returnjoin('',array_slice($t_string[0],$start,$sublen));
}else{
$start=$start*2;
$sublen=$sublen*2;
$strlen=strlen($string);
$tmpstr='';

for($i=0;$i<$strlen;$i++){
if($i>=$start&&$i<($start+$sublen)){
if(ord(substr($string,$i,1))>129){
$tmpstr.=substr($string,$i,2);
}else{
$tmpstr.=substr($string,$i,1);
}
}
if(ord(substr($string,$i,1))>129)$i++;
}
if(strlen($tmpstr)<$strlen)$tmpstr.="...";
return$tmpstr;
}
}

使用方法如下:
$str="jQuery外掛實現的載入圖片和頁面效果";
echocutStr($str,16);