PHP自定义函数截取字符串,并用......补充

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuyawei_xyw/article/details/81225998

       字符串截取有时候会涉及到编码的问题,自己写的如果不完善很容易出现截取出现乱码的问题,这样的函数功能块通常会用在截取文章描述和标题的时候。

       在实际的编写代码过程中,不免要用到截取字符串,比如在商品模块里,商品的描述过程,而在前台完全展示,会让界面显得臃肿难看,这时就需要截取字符串,展示前几个字段信息。字符串截取有时候会涉及到编码的问题,自己写的如果不完善很容易出现截取出现乱码的问题。对这个问题,参照着前辈们的经验,两种方法(第二种方法是参考的)实现的比较函数,下一个函数是上一个的函数的多条件处理。

<?php
//定义一个字符串
$titles  =  "请由我引吭高歌,面迎啊海上风";

$title_subtext  =  subtext($titles,6);
if($title_subtext){
    echo "subtext()函数截取的字符串: ".$title_subtext;
}

$title  =  cut_str($titles,6);
if($title){
    echo "<br>cut_str()函数截取的字符串: ".$title;
}

//字符串截取,cut_str函数(一)
function subtext($sourcestr, $cutlength)
{
    if(mb_strlen($sourcestr, 'utf-8') > $cutlength){
        //字符串截取并且超出显示省略号
        return mb_substr($sourcestr,0,$cutlength,'utf-8')."......";
    }
    return $sourcestr;
}

//字符串截取,cut_str函数(二)
function cut_str($sourcestr,$cutlength)  
{
    //先定义一个空字符串
    $returnstr  =  '';
    //初始字节
    $i  =  0;
    $n = 0; 
    //字符串的字节数 ,中文在utf-8编码是3个字节,strlen()计算字节数
    $str_length  = strlen($sourcestr);
    while (($n < $cutlength) and ($i <= $str_length))  
    {
        //substr()函数截取字符串,从$i开始长度为1个
        $temp_str = substr($sourcestr,$i,1); 
        //得到字符串中第$i位字符的ascii码,ord()函数返回字符串的首个字符的 ASCII 值
        $ascnum = ord($temp_str);
        //如果ASCII位高与224 
        if ($ascnum >= 224) 
        {  
            //根据UTF-8编码规范,将3个连续的字符计为单个字符
            $returnstr = $returnstr.substr($sourcestr,$i,3);       
            $i = $i + 3;
            //字串长度计1  
            $n++ ;
            //如果ASCII位高与192
         }elseif ($ascnum >= 192){  
            //根据UTF-8编码规范,将2个连续的字符计为单个字符
            $returnstr = $returnstr.substr($sourcestr,$i,2);
            $i = $i + 2;
            //字串长度计1
            $n++ ;  
            //如果是大写字母
         }elseif ($ascnum >= 65 && $ascnum <= 90){  
             $returnstr = $returnstr.substr($sourcestr,$i,1); 
             $i = $i + 1;
             $n++ ;   
             //其他情况下,比如小写字母
         }else {  
             $returnstr = $returnstr.substr($sourcestr,$i,1);  
             $i = $i + 1;
             $n = $n + 0.5;
         }
     }
     //如果预截取的字符串超过长度时在尾处加上省略号 
     if ($str_length > $i){  
         $returnstr  =  $returnstr . "......"; 
     }  
     return $returnstr; 
} 

输出信息:

subtext()函数截取的字符串: 请由我引吭高......
cut_str()函数截取的字符串: 请由我引吭高......

猜你喜欢

转载自blog.csdn.net/xuyawei_xyw/article/details/81225998