1. 截取GB2312中文字符串
< ?php
//截取中文字符串
function mysubstr($str, $start, $len)
{
$tmpstr = "";
$strlen =
$start + $len;
for($i = 0; $i < $strlen; $i++)
{
if(ord(substr($str, $i, 1))
> 0xa0)
{
$tmpstr
.= substr($str, $i,
2);
$i++;
}
else
$tmpstr
.= substr($str, $i,
1);
}
return
$tmpstr;
}
?>
2. 截取utf8编码的多字节字符串
< ?php
//截取utf8字符串
function utf8Substr($str, $from,
$len)
{
return
preg_replace(‘#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,‘.$from.‘}‘.
‘((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,‘.$len.‘}).*#s‘,
‘$1‘,$str);
}
?>
3.
UTF-8、GB2312都支持的汉字截取函数
< ?php
function cut_str($string, $sublen, $start = 0, $code =
‘UTF-8‘)
{
if($code ==
‘UTF-8‘)
{
$pa
=
"/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa,
$string,
$t_string);
if(count($t_string[0])
- $start > $sublen) return join(‘‘, array_slice($t_string[0], $start,
$sublen))."...";
return
join(‘‘, array_slice($t_string[0], $start,
$sublen));
}
else
{
$start
= $start*2;
$sublen =
$sublen*2;
$strlen =
strlen($string);
$tmpstr =
‘‘;
for($i=0;
$i< $strlen;
$i++)
{
if($i>=$start
&& $i<
($start+$sublen))
{
if(ord(substr($string,
$i,
1))>129)
{
$tmpstr.=
substr($string, $i,
2);
}
else
{
$tmpstr.=
substr($string, $i,
1);
}
}
if(ord(substr($string,
$i, 1))>129)
$i++;
}
if(strlen($tmpstr)<
$strlen ) $tmpstr.=
"...";
return
$tmpstr;
}
}
$str =
"abcd需要截取的字符串";
echo cut_str($str, 8, 0, ‘gb2312‘);
?>
4. BugFree
的字符截取函数
< ?php
function sysSubStr($String,$Length,$Append =
false)
{
if (strlen($String) < = $Length
)
{
return
$String;
}
else
{
$I
= 0;
while ($I <
$Length)
{
$StringTMP
=
substr($String,$I,1);
if
( ord($StringTMP) >=224
)
{
$StringTMP
=
substr($String,$I,3);
$I
= $I +
3;
}
elseif(
ord($StringTMP) >=192
)
{
$StringTMP
=
substr($String,$I,2);
$I
= $I +
2;
}
else
{
$I
= $I +
1;
}
$StringLast[]
=
$StringTMP;
}
$StringLast
=
implode("",$StringLast);
if($Append)
{
$StringLast
.=
"...";
}
return
$StringLast;
}
}
echo sysSubStr("CodeBit.cn --
简单、精彩、通用",18,false);
?>