解析使用substr截取UTF-8中文字符串的乱码问题
我们知道,有时使用substr截取UTF-8字符串,通常会有乱码。为什么会有这样的问题呢这篇文章告诉你答案。看这样的一段代码(字符编码UTF-8):
复制代码代码如下所示:
<
$str =都知道,mb_strlen strlen是字符串长度函数;
回声strlen(str)'。mb_strlen($str,'utf-8);
>
要运行上面的代码,返回值如下所示:
六十六
三十四
是什么样的在所有的,中国是三个字节的长度,和英语是一个字节长度!在mb_strlen,都计算为一个字节!所以,我们有时使用substr截取UTF-8字符串,经常会出现混乱,这就是原因!
下面提供了一个功能,截取UTF-8字符串:
复制代码代码如下所示:
功能cutstr(sourcestr美元,美元cutlength){
returnstr美元=;
$ I = 0;
$ = 0;
str_length美元= strlen($ sourcestr);
mb_str_length = mb_strlen美元(美元sourcestr,'utf-8);
而(($ n<cutlength美元)(美元我< = $ str_length)){
temp_str美元= substr(sourcestr美元美元,我,1);
ascnum美元= ORD($ temp_str);
如果($ ascnum > = 224){
returnstr = $(美元returnstr.substr sourcestr美元美元,我,3);
$ i = $ i + 3;
美元+;
}
($ ascnum > = 192){
returnstr = $(美元returnstr.substr sourcestr美元美元,我,2);
$ i = $ i + 2;
美元+;
}
Elseif(($ ascnum = 65)($ ascnum<90)){
returnstr = $(美元returnstr.substr sourcestr美元美元,我,1);
$ i = $ i + 1;
美元+;
}
别的{
returnstr = $(美元returnstr.substr sourcestr美元美元,我,1);
$ i = $ i + 1;
$ = $ n + 0.5;
}
}
如果($ mb_str_length > $ cutlength){
returnstr = returnstr美元美元。...;
}
返回的returnstr;
}
使用的例子:
复制代码代码如下所示:
<
有效期为三个月,超过系统有效期的有效期将自动删除该邮件;
/ /回声strlen(str);
/ /回声。mb_strlen($str,'utf-8);
回声;
回声。cutstr($str,24);
>