10

PHP 截取字符串

分类: PHP编程 3 Comments

相信很多人都用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);
}

TOP

Videos, Slideshows and Podcasts by Cincopa Wordpress Plugin