用 PHP 來列出數據庫中的一些資料,這些字串有長有短,放在同一個列表中,會使得列表時闊時窄,不太好看。還好的是,我們並不是要準確地知道這些字串的全部內容,大約查看一下便可。這情況下,最自然的做法,便是把字串一律限於特定的長度內,過長的字串,以尾綴 ... 來提示。
其實這是很常見的做法,phpMyAdmin 也是用這種方式來顯示數據的。如果在純英數的環境下,要自行編寫這樣的省略法式,做法並不難。但是,如字串中有中英混雜,由於一般來說中文字會佔兩個英數字的闊度關係,增加了把字串做省略的難度。困難在於我們要判定每一個字為中文還是英數,以便我們計算出應在那個位置略去字串。
這看來的確是件苦差,幸好貼心的 PHP 有內建函式去處理這問題:mb_strimwidth,還打正旗號是適合多位元字串而設。
string mb_strimwidth ( string $str , int $start , int $width [, string $trimmarker [, string $encoding ]] )
- $str 是要省略的字串。
- $start 是開始的位置,如字串頭開始,則 $start 為 0。
- $width 是想要的字串長度,即長度上限,注意:此長度包括尾綴提示!
- $trimmarker 是在過長串字的尾綴提示。
- $encoding 是字串的編碼。
例如:
echo mb_strimwidth("abcdefghij", 0, 10, "...", "UTF-8");
echo mb_strimwidth("abcdefghij", 0, 8, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 4, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 5, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 6, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 7, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 8, "...", "UTF-8");
echo mb_strimwidth("abc中文字", 0, 8, "...", "UTF-8");
便會得到
abcdefghij
abcde...
...
中...
中...
中文...
中文字串
abc中...
留言列表