找回密碼
 立即註冊
搜索
熱搜: 活動 交友 discuz
查看: 504|回復: 0

PHP 省略長字串

[複製鏈接]

257

主題

38

回帖

1138

積分

管理員

積分
1138
發表於 2023-5-25 10:19:51 | 顯示全部樓層 |閱讀模式

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

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|小黑屋|DoIT 科技論壇

GMT+8, 2025-6-15 21:38 , Processed in 0.017965 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回復 返回頂部 返回列表