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

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

本篇文章中,苏南大叔就想和大家分享的是这样一个php的mb扩展函数,mb_strimwidth。函数说明见这里:https://doc.php.sh/zh/function.mb-strimwidth.html 。以往我们使用的substr函数见这里:https://doc.php.sh/zh/function.substr.html , https://doc.php.sh/zh/function.mb-substr.html

函数说明

下面是个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

这个函数是以mb开头的,所以肯定需要php.ini中开启php_mbstring.dll扩展。
php截取字符串函数mb_strimwidth - 002

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

题外话

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

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

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

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。