php 截取字符串

180it 2021-02-28 PM 1111℃ 0条

/**

  • $sourcestr 是要处理的字符串
  • $cutlength 为截取的长度(即字数)
    */

static function cut_str($sourcestr, $cutlength, $type = true)
{

$returnstr = '';
$i = 0;
$n = 0;

$str_length = strlen(trim($sourcestr)); //字符串的字节数 

while (($n < $cutlength) and ($i <= $str_length))
{
    $temp_str = substr($sourcestr, $i, 1);
    $ascnum = Ord($temp_str); //得到字符串中第$i位字符的ascii码 
    if ($ascnum >= 224)    //如果ASCII位高与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 ($type == true)
{
    if ($str_length > $cutlength)
    {
        $returnstr = $returnstr . "..."; //超过长度时在尾处加上省略号
    }
}
return $returnstr;

}

/**

  • 修改截取后的省略号
  • @param unknown_type $sourcestr
  • @param unknown_type $cutlength
  • @param unknown_type $type
    */

static function cut_str2($sourcestr, $cutlength, $type = true)
{

$returnstr = '';
$i = 0;
$n = 0;

$str_length = strlen(trim($sourcestr)); //字符串的字节数 

while (($n < $cutlength) and ($i <= $str_length))
{
    $temp_str = substr($sourcestr, $i, 1);
    $ascnum = Ord($temp_str); //得到字符串中第$i位字符的ascii码 
    if ($ascnum >= 224)    //如果ASCII位高与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 ($type == true)
{
    if ($str_length > $cutlength * 3)
    {
        $returnstr = $returnstr . "..."; //超过长度时在尾处加上省略号
    }
}
return $returnstr;

}

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

php 截取字符串