zl程序教程

您现在的位置是:首页 >  后端

当前栏目

多个PHP中文字符串截取函数

PHP中文 函数 字符串 多个 截取
2023-06-13 09:15:11 时间

复制代码代码如下:


<?php
functionsysSubStr($string,$length,$append=false)
{
   if(strlen($string)<=$length)
   {
       return$string;
   }
   else
   {
       $i=0;
       while($i<$length)
       {
           $stringTMP=substr($string,$i,1);
           if(ord($stringTMP)>=224)
           {
               $stringTMP=substr($string,$i,3);
               $i=$i+3;
           }
           elseif(ord($stringTMP)>=192)
           {
               $stringTMP=substr($string,$i,2);
               $i=$i+2;
           }
           else
           {
               $i=$i+1;
           }
           $stringLast[]=$stringTMP;
       }
       $stringLast=implode("",$stringLast);
       if($append)
       {
           $stringLast.="...";
       }
       return$stringLast;
   }
}

$string="简明现代魔法——专注于互联网主流的各种技术";
$length="27";
$append=true;
echosysSubStr($string,$length,$append);
//输出
//简明现代魔法——专...
?>

截取GB2312中文字符串:

复制代码代码如下:

<?php
//截取中文字符串
functionmysubstr($str,$start,$len){
   $tmpstr="";
   $strlen=$start+$len;
   for($i=0;$i<$strlen;$i++){
       if(ord(substr($str,$i,1))>0xa0){
           $tmpstr.=substr($str,$i,2);
           $i++;
       }else
           $tmpstr.=substr($str,$i,1);
   }
   return$tmpstr;
}
?>

截取utf8编码的多字节字符串:

复制代码代码如下:
<?php
//截取utf8字符串
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);
}
?>

UTF-8、GB2312都支持的汉字截取函数:

复制代码代码如下:
<?php
/*
Utf-8、gb2312都支持的汉字截取函数
cut_str(字符串,截取长度,开始长度,编码);
编码默认为utf-8
开始长度默认为0
*/

functioncut_str($string,$sublen,$start=0,$code="UTF-8")
{
   if($code=="UTF-8")
   {
       $pa="/[\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]/";
       preg_match_all($pa,$string,$t_string);

       if(count($t_string[0])-$start>$sublen)returnjoin("",array_slice($t_string[0],$start,$sublen))."...";
       returnjoin("",array_slice($t_string[0],$start,$sublen));
   }
   else
   {
       $start=$start*2;
       $sublen=$sublen*2;
       $strlen=strlen($string);
       $tmpstr="";

       for($i=0;$i<$strlen;$i++)
       {
           if($i>=$start&&$i<($start+$sublen))
           {
               if(ord(substr($string,$i,1))>129)
               {
                   $tmpstr.=substr($string,$i,2);
               }
               else
               {
                   $tmpstr.=substr($string,$i,1);
               }
           }
           if(ord(substr($string,$i,1))>129)$i++;
       }
       if(strlen($tmpstr)<$strlen)$tmpstr.="...";
       return$tmpstr;
   }
}

$str="abcd需要截取的字符串";
echocut_str($str,8,0,"gb2312");
?>