PHP中英文混合字符串处理

转载请注明来源:https://www.cnblogs.com/hookjc/

function cut_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) return join('', array_slice($t_string[0], $start, $sublen))."...";

                return  join('', 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;

      }

   }


/**

  * PHP获取字符串中英文混合长度 

  * @param $str string 字符串

  * @param $$charset string 编码

  * @return 返回长度,1中文=1位,2英文=1位

  */

 function strLength($str,$charset='utf-8'){

     if($charset=='utf-8') $str = iconv('utf-8','gb2312',$str);

     $num = strlen($str);

     $cnNum = 0;

     for($i=0;$i<$num;$i++){

         if(ord(substr($str,$i+1,1))>127){

             $cnNum++;

             $i++;

        }

     }

     $enNum = $num-($cnNum*2);

     $number = ($enNum/2)+$cnNum;

     return ceil($number);

 }

来源:python脚本自动迁移

posted @ 2020-06-24 11:20  jiangcheng_15  阅读(375)  评论(0编辑  收藏  举报