原文请关注我的博客https://mengkang.net/1129.html很多工程师工作1的时候最简单~3年遇到瓶颈不知道应该学什么,面试总是被拒。那么PHP之后应该怎么学呢?安利系列直播PHP进阶之路需求如果需要将可能包含中文的字符串拆分成数组,我们以utf-8编码为例。解法1我习惯的方法可能是:mb_internal_encoding("UTF-8");$str="周孟康";$array=[];for($i=0,$l=mb_strlen($str);$i<$l;$i++){array_push($array,mb_substr($str,$i,1,"utf-8"));}var_export($array);如果我们没有安装mb扩展怎么办?方案二今天看到一段代码,别人是这样写的:functionstr_split_utf8($str){$split=1;$数组=数组();对于($i=0;$i127){如果($value>=192&&$value<=223){$split=2;}elseif($value>=224&&$value<=239){$split=3;}elseif($value>=240&&$value<=247){$split=4;}}else{$split=1;}$key=null;对于($j=0;$j<$split;$j++,$i++){$key.=$str[$i];}array_push($array,$key);}返回$array;}代码解释strlen计算字节数,直接使用$str[x]沿袭了C语言中char数组和字符串的习惯,也就是说$str是按字节读取的,也就是说每次读取数据的ascii码值不能大于255,php中使用ord获取ascii码值。切割规则如下。Ascii码范围Cuttingoffset0~1271bytes192~2232bytes224~2393bytes240~2474bytes为什么?http://www.ruanyifeng.com/blo...https://segmentfault.com/a/11...utf-8Unicode的由来口语说明Unicode只是一个符号集,它只规定了二进制编码的符号,但没有指定应如何存储此二进制代码。UTF-8UTF-8是Internet上使用最广泛的Unicode实现。UTF-8最大的特点之一就是它是一种变长编码方式。它可以用1~4个字节来表示一个符号,字节长度根据不同的符号而不同。UTF-8的编码规则很简单,只有两条:对于一个单字节符号,该字节的第一位设为0,后7位为该符号的Unicode编码。因此,对于英文字母,UTF-8编码和ASCII码是一样的(可以容纳0~127)。对于一个n字节的符号(n>1),第一个字节的前n位全部设为1,第n+1位设为0,后面字节的前两位全部设为10其余未提及的二进制位均为该符号的Unicode编码。下表总结了编码规则,字母x表示可用的编码位:Unicode符号范围(十六进制)UTF-8编码方式(二进制)UTF-8首字节范围00000000-0000007F0xxxxxxx0~12700000080-000007FF110xxxxx10xxxxxx(128+64)~(255-32)为192~22300000800-0000FFFF1110xxxx10xxxxxx10xxxxxx(128+64+32)~(255-16)为224~23900010000-0010FFFF11010xxxx(10xxx8+64+16)+32~(255-8)就是240~247。这张表你一定看过,大家也能看懂。