字符截取 支持UTF8/GBK

/* *
 * 字符截取 支持UTF8/GBK
 * @param $string
 * @param $length
 * @param $dot
 
*/
function str_cut($ string, $length, $dot =  ' ... ') {
    $strlen = strlen($ string);
     if($strlen <= $length)  return $ string;
    $ string = str_replace(array( '   ', ' &nbsp; '' &amp; '' &quot; '' ' '' &ldquo; '' &rdquo; '' &mdash; '' &lt; '' &gt; '' &middot; '' &hellip; '), array( ' ', '   '' & '' " '" ' "' '' '' '' < '' > '' · '' '), $ string);
    $strcut =  '';
     if(strtolower(CHARSET) ==  ' utf-8 ') {
        $length = intval($length-strlen($dot)-$length/ 3);
        $n = $tn = $noc =  0;
         while($n < strlen($ string)) {
            $t = ord($ string[$n]);
             if($t ==  9 || $t ==  10 || ( 32 <= $t && $t <=  126)) {
                $tn =  1; $n++; $noc++;
            } elseif( 194 <= $t && $t <=  223) {
                $tn =  2; $n +=  2; $noc +=  2;
            } elseif( 224 <= $t && $t <=  239) {
                $tn =  3; $n +=  3; $noc +=  2;
            } elseif( 240 <= $t && $t <=  247) {
                $tn =  4; $n +=  4; $noc +=  2;
            } elseif( 248 <= $t && $t <=  251) {
                $tn =  5; $n +=  5; $noc +=  2;
            } elseif($t ==  252 || $t ==  253) {
                $tn =  6; $n +=  6; $noc +=  2;
            }  else {
                $n++;
            }
             if($noc >= $length) {
                 break;
            }
        }
         if($noc > $length) {
            $n -= $tn;
        }
        $strcut = substr($ string0, $n);
        $strcut = str_replace(array( ' '' & '' " '" ' "' '' '' '' < '' > '' · '' '), array( '   '' &amp; '' &quot; '' ' '' &ldquo; '' &rdquo; '' &mdash; '' &lt; '' &gt; '' &middot; '' &hellip; '), $strcut);
    }  else {
        $dotlen = strlen($dot);
        $maxi = $length - $dotlen -  1;
        $current_str =  '';
        $search_arr = array( ' & ', '   '' " '" ' "' '' '' '' < '' > '' · '' ', ' ');
        $replace_arr = array( ' &amp; ', ' &nbsp; '' &quot; '' ' '' &ldquo; '' &rdquo; '' &mdash; '' &lt; '' &gt; '' &middot; '' &hellip; ', '   ');
        $search_flip = array_flip($search_arr);
         for ($i =  0; $i < $maxi; $i++) {
            $current_str = ord($ string[$i]) >  127 ? $ string[$i].$ string[++$i] : $ string[$i];
             if (in_array($current_str, $search_arr)) {
                $key = $search_flip[$current_str];
                $current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);
            }
            $strcut .= $current_str;
        }
    }
     return $strcut.$dot;
}

你可能感兴趣的:(utf8)