php截取中英文字符串操作
程序员文章站
2022-04-17 13:47:49
...
今天遇到一个这样的问题。想必大家都遇到过,因为排版需要,如果用户名如果过长的话,将做截取操作,显示为... 。 我们的需求类似sina 微博,如果是中文的话,最多显示5位,如果超过5位则显示4个中文,三个... ,大家都知道,排版时一个中文占两个英文的位置。所以要最多显示10位,类推上面的来的。
在网上找到的解决办法不是很好,我自己写了一个。我把它们放到helper里面了。不说思路了,直接上代码吧。
<?php class Zend_View_Helper_UserName { public function userName($userName, $length) { $retUserName = ''; $position = 0; $count = 1; while ($count <= $length) { $subStr = mb_substr($userName, $position, 1, 'UTF-8'); if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u", $subStr)) { $count += 2; } else { $count++; } $position++; $retUserName .= $subStr; } $retUserNameLength = mb_strlen($retUserName); $userNameLength = mb_strlen($userName) ; if ($retUserNameLength >= $userNameLength - 1 && $retUserNameLength <= $userNameLength) { $retUserName = $userName; } else { $retUserName .= '...'; } return $retUserName; } }
这样用的时候就可以轻松的对名字截取了。而且对中英文都合适。弊端是可能会比substr之类的函数消耗一些资源。