Home > PHP编程 > PHP 截取字符串

PHP 截取字符串

相信很多人都用PHP自带的substr();在截取中文字符串的时候遇到麻烦。
在这里贴一个把中文当作一个长度截取的函数

function cutstr($str, $len, $dot='...')
{
     $i = $ti = 0;
     if (strlen($str) < $len) return $str;
     $charset = is_utf8($str);
     if ($charset) {
         while ($ti < $len) {
         $t = ord($str[$i]);
         if ($t >= 224) {
             $i += 3;
         } elseif ($t >= 192) {
             $i += 2;
         } else {
             $i++;
         }
         if ($i>$len+1) break;
             $ti++;
         }
    } else {
        for($ti = 0; $ti < $len; $ti++) {
            $t = ord($str[$i]);
            if ($t > 127) {
                $i += 2;
            } else {
	   $i++;
            }
        }
    }
    $rt = substr($str, 0, $i);
    return $rt;
}
//识别字符串编码
function is_utf8($string) {
    return preg_match('%^(?:
        [\x09\x0A\x0D\x20-\x7E]            # ASCII
        | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
        |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
        | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
        |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
        |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
        | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
        |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
   )*$%xs', $string);
}

POSTED ON 2010年07月10日,

评论总数:3

Leave my own
  1. test 回复
    10/08/03

    哈哈 路过

  2. 陕西塑料托盘 回复
    10/08/21

    抢个沙发给自己做做!

  3. 小说论坛 回复
    10/09/01

    我的百度空间。。。

发表您的看法

Trackbacks:0

Listed below are links to weblogs that reference
PHP 截取字符串 from andery's blog
TOP

Videos, Slideshows and Podcasts by Cincopa Wordpress Plugin