越简单越好!

php截取字符串的函数 支持utf8,gbk

发表于 2009-10-14 14:55 | 919次阅读 0次点赞   PHP
<?php
/**
* php截取字符串的函数 支持utf8,gbk
* -----------------------------------------------------
* $Author: Bevin Chen $
* $Email: bevin#chenapp.com $
* $Date: 2009-10-14 $
* -----------------------------------------------------
* @param    string       $str         被截取的字符串
* @param    int          $length      截取的长度
* @param    bool         $append      是否附加省略号
* @param    string       $charset     编码设置,utf8,gbk
*
* @return   string
*/
function sub_str($str, $length = 0, $append = true, $charset='utf8') {
    $str = trim($str);
    $strlength = strlen($str);
    $charset = strtolower($charset);

    if ($charset == 'utf8') {
        $l = 0;
        while ($i <= $strlength) {
            if (ord($str{$i}) < 0x80) { 
                $l++; $i++;
             } else if (ord($str{$i}) < 0xe0) {
                $l++; $i += 2; 
             } else if (ord($str{$i}) < 0xf0) { 
                $l += 2; $i += 3; 
             } else if (ord($str{$i}) < 0xf8) {
                $l += 1; $i += 4; 
             } else if (ord($str{$i}) < 0xfc) { 
                $l += 1; $i += 5; 
             } else if (ord($str{$i}) < 0xfe) { 
                $l += 1; $i += 6; 
             }

            if ($l >= $length) { 
                $newstr = substr($str, 0, $i);
                break;
             }
         }
        if($l < $length) {
            return $str;
         }
     } elseif($charset == 'gbk') {
        if ($length == 0 || $length >= $strlength) {
            return $str;
         }
        while ($i <= $strlength) {
            if (ord($str{$i}) > 0xa0) { 
                $l += 2; $i += 2;
             } else {
                $l++; $i++;
             }

            if ($l >= $length) { 
                $newstr = substr($str, 0, $i);
                break;
             }
         }
     }

    if ($append && $str != $newstr) {
        $newstr .= '..';
     }

    return $newstr;
}
?>
返回顶部 ^