PHP切割汉字的常用方法实例总结
本文实例讲述了PHP切割汉字的常用方法。分享给大家供大家参考,具体如下:
0xa0)//ord()函数返回字符串的第一个字符的ASCII值
{
$tmpstr.=substr($str,$i,2);
$i++;
}else{
$tmpstr.=substr($str,$i,1);
}
}
return$tmpstr;
}
/*----------------------------第二种方法-----------------------------------*/
//截取的是UTF-8字符串
functionutf_substr($str,$len)
{
$new_str=[];
for($i=0;$i<$len;$i++){
$tem_str=substr($str,0,1);
if(ord($tem_str>127)){
$i++;
if($i<$len){
$new_str[]=substr($str,0,3);
$str=substr($str,3);
}
}else{
$new_str[]=substr($str,0,1);
$str=substr($str,1);
}
}
returnjoin($new_str);//join()函数把数组元素组合为一个字符串
}
/*-------------------------------------第三种方法(UTF-8)--------------------------------*/
functioncutstr($string,$length)
{
preg_match_all("/[\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]/",$string,$info);
$wordscut="";
$j=0;
for($i=0;$i127?$j+2:$j+1;
if($j>$length-3){
return$wordscut."...";
}
}
returnjoin('',$info[0]);
}
$string="312哈哈,这个组合很难切割哦";
echocutstr($string,10);
/*---------------------------------下面是曾经用过的截取第三个的字符串的------------------------------*/
//$name1=mysql_result($my_rst,0,"name");
//$name=preg_match("/([1-9][0-9]+)/",$name1,$r);
//$name=$r[0];
//if($name==""){
//$name=preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,2}'.
//'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,1}).*#s',
//'$1',$name1);
//}
/*--------------------------------------------第四种方法(UTF-8)---------------------------------------------*/
functioncut_str($sourcestr,$cutlength)
{
$returnstr='';
$i=0;
$n=0;
$str_length=strlen($sourcestr);//字符串的字节数
while($n<$cutlength&&$i<=$str_length){
$temp_str=substr($sourcestr,$i,1);
$ascnum=ord($temp_str);//得到字符串中第$i位字符的ASCII码
if($ascnum>=224){
$returnstr=$returnstr.substr($sourcestr,$i,3);//根据UTF-8编码规范,将3个连续的字符计为单个字符
$i=$i+3;//实际Byte记为3
$n++;//字串长度为1
}elseif($ascnum>=192)//如果ASCII位高于192
{
$returnstr=$returnstr.substr($sourcestr,$i,2);//根据UTF-8编码规范,将2个连续的字符记为单个字符
$i=$i+2;//实际Byte记为2
$n++;//字串长度为1
}elseif($ascnum>=65&&$ascnum<=90)//如果是大写字母
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1;//byte记为1
$n++;//但考虑到整体美观,大写字母计成一个高位字符
}else{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1;//实际的Byte记为1
$n=$n+0.5;//小写字母和半角标点等与半个高位字符宽...
}
}
if($str_length>$cutlength){
$returnstr=$returnstr."...";//超过长度时在尾处加上省略号
}
return$returnstr;
}
/*--------------------第五种方法(UTF-8)---------------------------------------------*/
functionFSubstr($title,$start,$len="",$magic=true)
{
if($len=="")$len=strlen($title);
if($start!=0){
$startv=ord(substr($title,$start,1));
if($startv>=128){
if($startv<192){
for($i=$start-1;$i>0;$i--){
$tempv=ord(substr($title,$i,1));
if($tempv>=192)break;
}
$start=$i;
}
}
}
if(strlen($title)<=$len)returnsubstr($title,$start,$len);
$alen=0;
$blen=0;
$realnum=0;
$length=0;
for($i=$start;$i=252){
$cstep=6;
$length+=6;
$i+=5;
$realnum++;
if($magic){
$blen++;
$ctype=1;
}
}elseif(ord($cur)>=248){
$cstep=5;
$length+=5;
$i+=4;
$realnum++;
if($magic){
$ctype=1;
$blen++;
}
}elseif(ord($cur)>=240){
$cstep=4;
$length+=4;
$i+=3;
$realnum++;
if($magic){
$blen++;
$ctype=1;
}
}elseif(ord($cur)>=224){
$cstep=3;
$length+=3;
$i+=2;
$realnum++;
if($magic){
$ctype=1;
$blen++;
}
}elseif(ord($cur)>=192){
$ctype=2;
$length+=2;
$i+=1;
$realnum++;
if($magic){
$blen++;
$ctype=1;
}
}elseif(ord($cur)>=128){
$length+=1;
}else{
$cstep=1;
$length+=1;
$realnum++;
if($magic){
if(ord($cur)>=65&&ord($cur)<=90){
$blen++;
}else{
$alen++;
}
}
}
}
if($magic){
if(($blen*2+$alen)==($len*2))break;
if(($blen*2+$alen)==($len*2)+1){
if($ctype==1){
$length-=$cstep;
break;
}else{
break;
}
}
}else{
if($realnum==$len)break;
}
}
unset($cur);
unset($alen);
unset($blen);
unset($realnum);
unset($ctype);
unset($cstep);
returnsubstr($title,$start,$length);
}
functionutf8Substr($str,$from,$len)
{
returnpreg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
$title="你哈珀niad1纳斯达wopasdni你爱谁都没阿斯顿撒旦12ccs-sd";
$title=utf8Substr($title,0,15);
echo$title;
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP编码与转码操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php常用函数与技巧总结》及《PHP错误与异常处理方法总结》
希望本文所述对大家PHP程序设计有所帮助。