今天遇到一個這樣的問題。想必大家都遇過,因為排版需要,如果用戶名如果過長的話,將做截取操作,顯示為... 。 我們的需求類似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之類的函數消耗一些資源。