php截取字符串mb_strimwidth,中英文等长字符串截取
发布于 作者:苏南大叔 来源:程序如此灵动~
在中文网站的世界里面,一直都存在着一个字符串截取的魔咒。因为列表字符输出的时候,会出现中英文混排的现象,而我们一般认为中文的字符宽度是英文字符的2倍,也就是说,字符截取的时候,希望截取n个中文字符的时候,碰到英文的话,我们希望截取的是2n个。当然,这个最终的效果,还和页面上的字体设定有关。
本篇文章中,苏南大叔就想和大家分享的是这样一个php的mb扩展函数mb_strimwidth
。
函数说明
下面是个demo代码。
function test($str,$len=8){
$len=$len*2;
$str = mb_strimwidth($str, 0, $len, '...', 'utf8');
return $str;
}
echo test("123ab中cdfarefeafdsafdsafdsa")."<br/>";
echo test("我是中文12323414中文发达丰富的撒范德萨法撒")."<br/>";
echo test("我是中文中文中文中文中文中文中文中文中文中文中文中文中文")."<br/>";
echo test("123a中文bcdfarefeafdsafd中文中文中文中文中文safdsa")."<br/>";
效果图如下:
这个函数是以mb开头的,所以肯定需要php.ini中开启php_mbstring.dll扩展。
函数方面,需要注意,最后一个参数一定要主动传递“utf8”,否则使用的是默认值。可能会带来一定的不确定性。
相关文章
- http://doc.php.sh/zh/function.mb-strimwidth.html
- http://doc.php.sh/zh/function.substr.html
- http://doc.php.sh/zh/function.mb-substr.html
题外话
utf8编码下,一个中文是占用3个字节的,而不是2个。但是表现形式上来看,大家希望的是占用2个字符宽度。所以这点上不要弄混淆。
另外,在现在新浏览器普及的情况下,这种字符串截取的行为,不如换成css的字符串截取,适应性更好些。在接下来的文章中,苏南大叔将会给大家介绍,如何利用css实现类似的效果。
更多php相关文章,请点击苏南大叔的精彩好文。https://newsn.net/tag/php/ 。


