php轻松实现中英文混排字符串截取
先给大家介绍用到的函数:
mb_strwidth($str,$encoding)返回字符串的宽度 $str要计算的字符串 $encoding要使用的编码,如utf8、gbk
mb_strimwidth($str,$start,$width,$tail,$encoding)按宽度截取字符串 $str要截取的字符串 $start从哪个位置开始截取,默认是0 $width要截取的宽度 $tail追加到截取字符串后边的字符串,常用的是... $encoding要使用的编码
下边给大家实例演示:
<?php /** *utf8编码格式 *1个中文占用3个字节 *我们希望的是1个中文占用2个字节, *因为从宽度上看2个英文字母占用的位置相当于1个中文 */
//测试字符串 $str='aaaa啊啊aaaa啊啊啊aaa'; echostrlen($str);//只用strlen输出为25个字节
//必须指定编码,不然会使用php的内码mb_internal_encoding()可以查看内码 //使用mb_strwidth输出字符串的宽度为20使用utf8编码 echomb_strwidth($str,'utf8');
//只有宽度大于10才截取 if(mb_strwidth($str,'utf8')>10){ //此处设定从0开始截取,取10个追加...,使用utf8编码 //注意追加的...也会被计算到长度之内 $str=mb_strimwidth($str,0,10,'...','utf8'); }
//最后输出aaaa啊...4个a算4个1个啊算2个3个点算3个4+2+3=9 //是不是很简单啊,有的人说了为什么是9个不是10个吗? //因为正好“啊”的后边还是“啊”,中文算2个,9+2=11超出了设定,所以去掉1个就是9了 echo$str;