懂
PHP的都知道strlen与mb_strlen是求字符串长度的函数
,但是对于一些初学者来说
,如果不看手册,也许不太清楚其中的区别
。 先看这样一段代码吧(先决条件是:字符编码为UTF-8):
<?
$str='懂
PHP的都知道strlen与mb_strlen是求字符串长度的函数';
echostrlen($str)'.<br/>'.mb_strlen($str,'utf-8');
?>
运行上述代码,返回值如下:
66
34
怎么样?strlen中,中文是三个字节的长度,英文则是一个字节的长度!mb_strlen中,都被计算为一字节的长度!所以,我们有时候用substr来截取UTF-8中文字符串的时候,经常会出现乱码,就是这个原因了!
下面提供一个截取UTF-8字符串的函数:
functioncutstr($sourcestr,$cutlength){
$returnstr='';
$i=0;
$n=0;
$str_length=strlen($sourcestr);
$mb_str_length=mb_strlen($sourcestr,'utf-8');
while(($n<$cutlength)&&($i<=$str_length)){
$temp_str=substr($sourcestr,$i,1);
$ascnum=ord($temp_str);
if($ascnum>=224){
$returnstr=$returnstr.substr($sourcestr,$i,3);
$i=$i+3;
$n++;
}
elseif($ascnum>=192){
$returnstr=$returnstr.substr($sourcestr,$i,2);
$i=$i+2;
$n++;
}
elseif(($ascnum>=65)&&($ascnum<=90)){
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1;
$n++;
}
else{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1;
$n=$n+0.5;
}
}
if($mb_str_length>$cutlength){
$returnstr=$returnstr."...";
}
return$returnstr;
}
使用例子:
<?
$str='有效期最长三个月,超过有效期系统将自动删除本条信息';
//echostrlen($str);
//echo'<hr/>'.mb_strlen($str,'utf-8');
echo'<hr/>'.$str;
echo'<hr/>'.cutstr($str,24);
?>