我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

在中文网站的世界里面,一直都存在着一个字符串截取的魔咒。因为列表字符输出的时候,会出现中英文混排的现象,而我们一般认为中文的字符宽度是英文字符的2倍,也就是说,字符截取的时候,希望截取n个中文字符的时候,碰到英文的话,我们希望截取的是2n个。当然,这个最终的效果,还和页面上的字体设定有关。

苏南大叔:php截取字符串mb_strimwidth,中英文等长字符串截取 - php中文字符串截取
php截取字符串mb_strimwidth,中英文等长字符串截取(图3-1)

本篇文章中,苏南大叔就想和大家分享的是这样一个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/>";

效果图如下:

苏南大叔:php截取字符串mb_strimwidth,中英文等长字符串截取 - 001
php截取字符串mb_strimwidth,中英文等长字符串截取(图3-2)

这个函数是以mb开头的,所以肯定需要php.ini中开启php_mbstring.dll扩展。

苏南大叔:php截取字符串mb_strimwidth,中英文等长字符串截取 - 002
php截取字符串mb_strimwidth,中英文等长字符串截取(图3-3)

函数方面,需要注意,最后一个参数一定要主动传递“utf8”,否则使用的是默认值。可能会带来一定的不确定性。

相关文章

题外话

utf8编码下,一个中文是占用3个字节的,而不是2个。但是表现形式上来看,大家希望的是占用2个字符宽度。所以这点上不要弄混淆。

另外,在现在新浏览器普及的情况下,这种字符串截取的行为,不如换成css的字符串截取,适应性更好些。在接下来的文章中,苏南大叔将会给大家介绍,如何利用css实现类似的效果。

更多php相关文章,请点击苏南大叔的精彩好文。https://newsn.net/tag/php/

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    mb_strimwidth