php分割中英文字符串的几种方

 我来答
一骑当后
2014-11-11 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40298 获赞数:306440
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部
对一段文字按照字数进行分割,因为文字中可能是中英文混合的,而php函数strlen只能计算出字串的字节数,于是自己实现了几个函数,分享下。
例1,计算字符总长度。
01    <?php    
02    function ccStrLen($str) #计算中英文混合<a href="/"target="_blank" class="infotextkey">字符串</a>的长度    
03    {    
04    $ccLen=0;    
05    $ascLen=strlen($str);    
06    $ind=0;    
07    $hasCC=ereg(”[xA1-xFE]“,$str); #判断是否有汉字    
08    $hasAsc=ereg(”[x01-xA0]“,$str); #判断是否有ASCII字符    
09    if($hasCC && !$hasAsc) #只有汉字的情况    
10    return strlen($str)/2;    
11    if(!$hasCC && $hasAsc) #只有Ascii字符的情况    
12    return strlen($str);    
13    for($ind=0;$ind<$ascLen;$ind++)    
14    {    
15    if(ord(substr($str,$ind,1))>0xa0)    
16    {    
17    $ccLen++;    
18    $ind++;    
19    }    
20    else    
21    {    
22    $ccLen++;    
23    }    
24    }    
25    return $ccLen;    
26    }    
27    ?>    
例2,从左侧截取字符串。
01    <?php    
02    function ccStrLeft($str,$len) #从左边截取中英文混合字符串    
03    {    
04    $ascLen=strlen($str); if($ascLen<=$len) return $str;    
05    $hasCC=ereg(”[xA1-xFE]“,$str); #同上    
06    $hasAsc=ereg(”[x01-xA0]“,$str);    
07    if(!$hasCC) return substr($str,0,$len);    
08    if(!$hasAsc)    
09    if($len & 0×01) #如果长度是奇数    
10    return substr($str,0,$len+$len-2);    
11    else    
12    return substr($str,0,$len+$len);    
13    $cind=0;$flag=0;$reallen=0;//实际取字节长    
14    while($cind<$ascLen && $reallen<$len)    
15    { //by www.jbxue.com    
16    if(ord(substr($str,$cind,1))<0xA1){ //如果该字节为英文 则加一    
17    $cind++;    
18    }else{//否则 加2个字节    
19    $cind+=2;    
20    }    
21    $reallen++;    
22    }    
23    return substr($str,0,$cind);    
24    }    
25    ?>    
例3,把给定文字,按切割数量存入数组(适合短篇文字,长文章可没分隔一部分就直接处理一次)
view sourceprint?
01    <?php    
02    function SplitContent($content,$smslen){    
03    $str_tmp=$content;    
04    $arr_cont=array();    
05    $len_tmp=0;    
06    $i=0;//分割绝对位置    
07    while (strlen($str_tmp)>0){    
08    $str_tmp=ccStrLeft($str_tmp,$smslen);    
09    array_push($arr_cont,$str_tmp);    
10    $i+=strlen($str_tmp);    
11    $str_tmp=substr($content,$i,strlen($content));    
12    }    
13    return $arr_cont;    
14    } //by www.jbxue.com    
15    ?>    
测试:
1    <?php    
2    $str=’a计算中英文混合1234字符串的长度abcd’;    
3    echo $str.’的长度为:’.ccStrLen($str);    
4    echo ‘<br>’;    
5    $smslen=3;//截取长度    
6    print_r(SplitContent($str,$smslen));    
7    ?>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式