中文字符截取且支持utf-8函数
时间:2008-01-10 来源:yueming
?php
/**
* 由于此函数返回的是一个数组,因此要配合join函数来显示字符串:
* join('',subString_UTF8($str, $start, $lenth));
* 在页面显示的时候还可以在此语句后面连一个"..."
*
* 注:
* 编码 第一字节 第二字节
* gb2312 0xa1-0xf7 0xa1-0xfe
* gbk 0x81-0xfe 0x81-0xfe 0x40-0x7e
* big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e
*
* 中文字符截取且支持utf-8
*
* @Param: char $str,
* @Param: intege $start,
* @Param: intege $start,
* @return: $s.
* time: Tue Aug 07 18:18:27 CST 2007
* lastime: Tue Aug 07 18:18:27 CST 2007
*/
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;
}
?>
相关阅读 更多 +