早教吧 育儿知识 作业答案 考试题库 百科 知识分享

php中英文截取不同长度问题的探讨$str1="汉字汉字汉字汉字汉字";$str2="Thisisenglishthisisenglish";$str3="我II说say话words";我们知道mbstrlen或mbsubstr都是将汉字做1字节处理所以截取mbsubstr($str,0

题目详情
php中英文截取不同长度问题的探讨
$str1 = "汉字汉字汉字汉字汉字";
$str2 = "Thisis english this is english";
$str3 = "我I I说say话words";
我们知道mb_strlen或mb_substr都是将汉字做1字节处理
所以截取mb_substr($str,0,6)结果为
汉字
Thisis
我I i
可以看出,第二个Thisis长度要比汉字看起来要宽一些不美观,截取更长时候效果更明显
如何做到取得的字节一样长(也就是截取的字符串看起来一样长)
/* 我试了substr这个可以截一样长
但是存在截取半个汉字乱码现象,想想也难怪
所以只需保证str的第N个字节,不是"汉字的内部"就可以用substr了
*/
//一个汉字strlen("中")为三字节,此长度不知是不是系统无关的,忘了
//高手支个招(最好不用扩展库、正则或是比较0x80 )
▼优质解答
答案和解析
utf-8的话可以用:function my_substr($str,$start,$len){$tmpstr = "";$strlen = $start + $len;for($i = 0; $i < $strlen; $i++){if( ord( substr($str,$i,1) ) > 0xa0 ){$tmpstr .= substr($str,$i,3);$i += 2;} ...