用 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中...

(c.f. http://php.net/manual/en/function.mb-strimwidth.php)

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 小輝 的頭像
    小輝

    惘然

    小輝 發表在 痞客邦 留言(0) 人氣()