4种PHP截取指定个数中文字符串的方法

WBOY
Freigeben: 2016-06-20 13:04:40
Original
1780 Leute haben es durchsucht

PHP网站制作中,有时候为了有更好的用户体验及布局我们经常会指定输出几个中文字符,以便有更好的视觉体验,也可以在用PHP截取UTF-8中文字符串中半个字符乱码问题。下面我分享两种PHP截取指定个数中文字符串的方法

一、通过UTF8编码字符的特性

UTF-8编码的字符可能由1~3个字节组成, 具体数目可以由第一个字节判断出来。(理论上可能更长,但这里假设不超过3个字节)第一个字节大于224的,它与它之后的2个字节一起组成一个UTF-8字符第一个字节大于192小于224的,它与它之后的1个字节组成一个UTF-8字符否则第一个字节本身就是一个英文字符(包括数字和一小部分标点符号)。


<?php<br />//$sourcestr 要处理的字符串 <br />//$cutlength 截取的长度(即字数) <br />function cut_str($sourcestr,$cutlength) <br />{ <br />   $returnstr=''; <br />   $i=0; <br />   $n=0; <br />   $str_length=strlen($sourcestr);//字符串的字节数 <br />   while (($n<$cutlength) and ($i<=$str_length)) <br />   { <br />      $temp_str=substr($sourcestr,$i,1); <br />      $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码 <br />      if ($ascnum>=224)    //如果ASCII位高与224,<br />      { <br />         $returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符         <br />         $i=$i+3;            //实际Byte计为3<br />         $n++;            //字串长度计1<br />      }<br />      elseif ($ascnum>=192) //如果ASCII位高与192,<br />      { <br />         $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符 <br />         $i=$i+2;            //实际Byte计为2<br />         $n++;            //字串长度计1<br />      }<br />      elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,<br />      { <br />         $returnstr=$returnstr.substr($sourcestr,$i,1); <br />         $i=$i+1;            //实际的Byte数仍计1个<br />         $n++;            //但考虑整体美观,大写字母计成一个高位字符<br />      }<br />      else                //其他情况下,包括小写字母和半角标点符号,<br />      { <br />         $returnstr=$returnstr.substr($sourcestr,$i,1); <br />         $i=$i+1;            //实际的Byte数计1个<br />         $n=$n+0.5;        //小写字母和半角标点等与半个高位字符宽...<br />      } <br />   } <br />         if ($str_length>$cutlength){<br />          $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号<br />      }<br />    return $returnstr;<br /><br /><br />}<br />?>
Nach dem Login kopieren

二、通过字符的 ASCII 值特点1

<?php<br />function cutstr($string, $length) {<br />        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);  <br />        for($i=0; $i<count($info[0]); $i++) {<br />                $wordscut .= $info[0][$i];<br />                $j = ord($info[0][$i]) > 127 ? $j + 2 : $j + 1;<br />                if ($j > $length - 3) {<br />                        return $wordscut." ...";<br />                }<br />        }<br />        return join('', $info[0]);<br />}<br />$string="242432PHP建站门户系统7890";<br />for($i=0;$i<strlen($string);$i++)<br />{<br /> echo cutstr($string,$i)."<br>";<br />}<br />?><count info="" 0="" i="" wordscut="" j="ord($info[0][$i])"><strlen string="" i="" echo="" cutstr="" br=""></strlen></count>
Nach dem Login kopieren

三、通过字符的 ASCII 值特点2

<?php<br />function utf8_substr($str,$len)<br />{<br />for($i=0;$i<$len;$i++)<br />{<br />$temp_str=substr($str,0,1);<br />if(ord($temp_str) > 127)<br />{<br />$i++;<br />if($i<$len)<br />{<br />$new_str[]=substr($str,0,3);<br />$str=substr($str,3);<br />}<br />}<br />else<br />{<br />$new_str[]=substr($str,0,1);<br />$str=substr($str,1);<br />}<br />}<br />return join($new_str);<br />}<br />?>
Nach dem Login kopieren

四、通过字符的 ASCII 值特点3


<?php<br />function msubstr($str, $start, $len) {<br />    $tmpstr = "";<br />    $strlen = $start + $len;<br />    for($i = 0; $i < $strlen; $i++) {<br />        if(ord(substr($str, $i, 1)) > 0xa0) {<br />            $tmpstr .= substr($str, $i, 2);<br />            $i++;<br />        } else<br />            $tmpstr .= substr($str, $i, 1);<br />    }<br />    return $tmpstr;<br />}<br /><br /><br />?>
Nach dem Login kopieren



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage