首頁  >  文章  >  後端開發  >  php截取中英文字串操作

php截取中英文字串操作

巴扎黑
巴扎黑原創
2016-11-22 10:43:081174瀏覽

今天遇到一個這樣的問題。想必大家都遇過,因為排版需要,如果用戶名如果過長的話,將做截取操作,顯示為... 。 我們的需求類似sina 微博,如果是中文的話,最多顯示5位,如果超過5位則顯示4個中文,三個... ,大家都知道,排版時一個中文佔兩個英文的位置。所以要最多顯示10位,類推上面的來的。

在網路上找到的解決方法不是很好,我自己寫了一個。我把它們放到helper裡面了。不說思路了,直接上程式碼吧。

<?php
class Zend_View_Helper_UserName
{
    public function userName($userName, $length)
    {
        $retUserName = &#39;&#39;;
        $position = 0;
        $count = 1;
        while ($count <= $length) {
            $subStr = mb_substr($userName, $position, 1, &#39;UTF-8&#39;);
            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 .= &#39;...&#39;;
        }
        return $retUserName;
    }
}

這樣用的時候就可以輕鬆的對名字截取了。而且對中英文都合適。弊端是可能會比substr之類的函數消耗一些資源。 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:php錯誤報告下一篇:php錯誤報告