在PHP中字符截取函數substr只能截取全英文才不會出現亂碼如果裡面有中文肯定是無法截取的,下面小編來給大家介紹兩個兼容各類gbk,utf-8編碼字符串截取函數
例1
代碼如下 復制代碼function CsubStrPro($str, $start, $length, $charset = "utf-8", $suffix = false)
{
if (function_exists ( "mb_substr" ))
return mb_substr ( $str, $start, $length, $charset );
$re ['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re ['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$re ['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
$re ['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
preg_match_all ( $re [$charset], $str, $match );
$slice = join ( "", array_slice ( $match [0], $start, $length ) );
if ($suffix)
return $slice . "…";
return $slice;
}
例2
代碼如下 復制代碼 function subString_UTF8($str, $start, $lenth)
{
$len = strlen($str);
$r = array();
$n = 0;
$m = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
if ($n < $start){
if (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}else{
if (substr($a, 0, 1) == 0) {
$r[ ] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[ ] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[ ] = substr($str, $i, 3);
$i += 2;
}else{
$r[ ] = '';
}
if (++$m >= $lenth){
break;
}
}
}
return $r;
} // End subString_UTF8;
}// End String
#由於此函數返回的是一個數組,因此要配合join函數來顯示字符串:
#join('',subString_UTF8($str, $start, $lenth));
#在頁面顯示的時候還可以在此語句後面連一個"..."