PHP字符截取函数,兼容各类gbk,utf-8编码
在PHP中字符截取函数substr只能截取全英文才不会出现乱码如果里面有中文肯定是无法截取的,下面小编来给大家介绍两个兼容各类gbk,utf-8编码字符串截取函数
例1
<?php
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
<?php
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));
#在页面显示的时候还可以在此语句后面连一个"..."
教程网址:http://www.phprm.com/develop/52673.html
欢迎收藏∩_∩但请保留本文链接。