可以保证单词完整性的PHP英文字符串截取代码分享
直接上代码:
/**
*完整词的截取
*
*@param$str
*@param$start
*@param$length
*
*@returnstring
*/
publicstaticfunctionusubstr($str,$start,$length=null)
{
//先正常截取一遍.
$res=substr($str,$start,$length);
$strlen=strlen($str);
/*接着判断头尾各6字节是否完整(不残缺)*/
//如果参数start是正数
if($start>=0){
//往前再截取大约6字节
$next_start=$start+$length;//初始位置
$next_len=$next_start+6<=$strlen?6:$strlen-$next_start;
$next_segm=substr($str,$next_start,$next_len);
//如果第1字节就不是完整字符的首字节,再往后截取大约6字节
$prev_start=$start-6>0?$start-6:0;
$prev_segm=substr($str,$prev_start,$start-$prev_start);
}//start是负数
else{
//往前再截取大约6字节
$next_start=$strlen+$start+$length;//初始位置
$next_len=$next_start+6<=$strlen?6:$strlen-$next_start;
$next_segm=substr($str,$next_start,$next_len);
//如果第1字节就不是完整字符的首字节,再往后截取大约6字节.
$start=$strlen+$start;
$prev_start=$start-6>0?$start-6:0;
$prev_segm=substr($str,$prev_start,$start-$prev_start);
}
//判断前6字节是否符合utf8规则
if(preg_match('@^([x80-xBF]{0,5})[xC0-xFD]?@',$next_segm,$bytes)){
if(!empty($bytes[1])){
$bytes=$bytes[1];
$res.=$bytes;
}
}
//判断后6字节是否符合utf8规则
$ord0=ord($res[0]);
if(128<=$ord0&&191>=$ord0){
//往后截取,并加在res的前面.
if(preg_match('@[xC0-xFD][x80-xBF]{0,5}$@',$prev_segm,$bytes)){
if(!empty($bytes[0])){
$bytes=$bytes[0];
$res=$bytes.$res;
}
}
}
if(strlen($res)<$strlen){
$res=$res.'...';
}
return$res;
}热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下