PHP UTF-8 截字、斷字專用 function

Home Home
引用 | 編輯 笑笑
2008-06-12 11:46
樓主
推文 x0
在寫網頁的時後常會遇到 80 個字要截字, 然後超過 80 字加 "...", 未滿 80 字不加.. 等等之類的問題.

之前用 mb_substr 的寫法如下:

複製程式
$string = strip_tags($string); // 先清掉 html tag, 以免 html tag 被破壞
$string = mb_substr($string, 0, 80, 'UTF-8');
$string .= (mb_strlen($string, 'UTF-8') > 80)?'...':''
PHP 有支援很方便的 function 可以直接達到此功能.

複製程式
$string = strip_tags($string);
$string = mb_strimwidth($string, 0, 80, '...', 'UTF-8');
在 UTF-8 的環境算字數用 strlen 或 mb_strlen 都不是很準, 所以可以用另一個做法, 算字的寬度, 也是個不錯的做法

複製程式
echo mb_strwidth($string, 'UTF-8'); // 算字寬度

mb_strlen 跟 mb_strwidth 有什麼不同呢?

複製程式
echo mb_strwidth("數位男女", 'UTF8').'<br>'
echo mb_strlen("數位男女", 'UTF8').'<br>'
你會看到

8
4

所以如果你是要顯示在網頁上,那就用 mb_strwidth 會比較準,因為一個中文字的寬度等於兩個英文字的寬度

如果你要寫入 MySQL ,那就要用 mb_strlen 比較準,因為 MySQL 4.1.x 以後,資料的內碼都是用 UTF-8 ,而欄位寬度也是用 UTF-8 去算的

獻花 x0