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);
}
