问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-26 09:27

我来回答

1个回答

热心网友 时间:2022-04-19 05:58

对一段文字按照字数进行分割,因为文字中可能是中英文混合的,而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    ?>

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
泰勒公式有哪些常见形式? 空调室内风机怎样工作 什么是县级以上医院 关于聚金宝 买白银问题 平安银行个人贵金属交易业务有哪些? 网易云音乐为什么歌这么少? 公路边种的有什么花 高速路上常用的绿化花卉有那些? 公路绿化用什么花 我一键开核后顺利进入WIN7 系统,可是一开网站就重启是怎么回事,我开6... oracle 正则表达式标点符号是否区分中英文符,以及所占字符长度!_百度... 中英文字符怎么样输入? 什么叫中英文字符 ...视频不带水印?可以合成照片做视频的那种,不要vue,vue有水印。_百度... 请问Vue2014的水印去除 人24小时要睡多少小时的觉 中国人4种睡觉姿势,你睡对了吗 睡眠可分哪几种类型 康佳电视系统升级到17年版本之后,再也不升级了,无法投屏怎么办? 正常人的睡眠类型有几种? 康佳电视今天老是显示系统更新,求解决,谢谢 睡眠分为哪几种类型? 怎么做到24小时都睡觉 康佳电视关闭自动升级 linux中gzip&#47;bzip2&#47;xz都有1-9压缩等级划分,想问像tar zcvf&#47;jcvf&#47;Jcvf 这种命令怎么指定压缩等级 请问睡觉的正确姿势有几种?? 安卓下的split.1 split.2等等分割文件如何解压? 再Linux下使用Tar工具归档文件的教程 晚上睡觉就姿势有多少种? 康佳电视系统显示升级,不让断电,都好长时间了,怎么回事? 呢称为二到十二位中英文字符或数字是什么请于个例子 vbs如何实现中中英文字符串的比较.为什么vbs读取中文字符串出现乱码? php中英文字符串为什么能比较大小 利用PHP函数计算中英文字符串长度的方法 《最终幻想14》中“ot”是什么意思? 截取中英文字符串 delphi 中英文字符串与字节数组 互转 中英文字符是如何保存到计算机中的? 电脑键盘上中英文符号一样是怎么回事 请教:JAVA中英文字符串截取的问题 java中 怎么计算中英文字符串混合的长度 oracle 如何计算中英文混合字符串占用的字节 PHP 中如何获得中英文混合字符串长度 松花蛋外面的糠皮怎么弄掉 B2B平台和B2C平台是什么?有什么用处 松花蛋外面裹的是什么东西?看起来像石灰 为什么皮蛋外面还弄一层蜡在上面? B2B 还是B2C? 哪个好 皮蛋外面包的一层是什么东西啊? 松花蛋储存把外,面那层石灰拨去还是不拨好?