没想到啊

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

函数所在:/source/function/function_core.php

function cutstr($string, $length, $dot = ' ...') {

    if(strlen($string) <= $length) { 
        return $string; 
    } 

    $pre = chr(1); 
    $end = chr(1); 
    $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array($pre.'&'.$end, $pre.'"'.$end, $pre.'<'.$end, $pre.'>'.$end), $string); 

    $strcut = ''; 
    if(strtolower(CHARSET) == 'utf-8') { 

        $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($string, 0, $n); 

    } else { 
        for($i = 0; $i < $length; $i++) { 
            $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i]; 
        } 
    } 

    $strcut = str_replace(array($pre.'&'.$end, $pre.'"'.$end, $pre.'<'.$end, $pre.'>'.$end), array('&amp;', '&quot;', '&lt;', '&gt;'), $strcut); 

    $pos = strrpos($strcut, chr(1)); 
    if($pos !== false) { 
        $strcut = substr($strcut,0,$pos); 
    } 
    return $strcut.$dot; 

}

posted on 2012-01-18 17:17  没想到啊  阅读(231)  评论(0)    收藏  举报