PHP 有一系列的 Multibyte String Functions ,很適合拿來處理 CJK 這些 Mutilbyte 字元
其中在切字串的部分就有三個不同的 function 可以用
分別是 mb_strcut, mb_substr, mb_strimwidth

mb_strcut($str, $start, $length, $charset); 所切出來的字串,是 byte 數不超過 $length 的字串,所以像是
mb_strcut('我是ronnywang', 0, 8, 'UTF-8'); 出來的就是 「我是ro」
適合用在所儲存的地方空間有限時,確保所占空間不要超過某個數字,但是又不要把 multibyte 字腰斬所使用。

mb_substr($str, $start, $length, $charset); 所切出來的字串,是總字數不超過 $length 的字串,其中中文和英文都分別算是一個字元,所以像是
mb_substr('我是ronnywang', 0, 5, 'UTF-8'); 出來的就是 「我是ron」 (總共四個字)

mb_strimwidth($str, $start, $width, $trimmarker, $charset); 所切出來的字串,是總長度不超過 $width 的字串,另外如果字需要被切到的話,還會幫你補上 $trimmarker (加上 $trimmarker 之後也不會超過 $width) ,而長度的部分,是以半形字是 1 全形字是 2 來計算,因此跟實際顯示出來的寬度會差不了多少。
像是
mb_strimwidth('我是ronnywang', 0, 9, '...', 'UTF-8'); 出來的就是 「我是ro...」 (寬度為 9)
mb_strimwidth('我是', 0, 9, '...', 'UTF-8'); 出來的就是 「我是」(寬度為4,小於 $width 就不會印出 ... 了)
mb_strimwidth('我是ronny', 0, 9, '...', 'UTF-8'); 出來的就是 「我是ronny」(寬度為9,剛好等於 $width 也不會印 ...)
適合用在要顯示一些固定長度的文字使用。

另外還有幾個取得長度的方式

strlen($str); 最原始的,取得就是 byte 數,像是
strlen('我是誰'); 在 UTF-8 就是 9 ,一個字 3 bytes 。

mb_strlen($str, $charset); 出來的是字數,像是
mb_strlen('我是誰', 'UTF-8') 是 3
mb_strlen('我是ronny', 'UTF-8') 是 7

mb_strwidth($str, $charset); 出來的是寬度,一樣是半形字算 1 ,全形字算 2
mb_strwidth('我是誰', 'UTF-8') 是 6
mb_strwidth('我是ronny', 'UTF-8') 是 9

依照不同需求就使用不同函式囉。



arrow
arrow
    全站熱搜
    創作者介紹
    創作者 榮尼王 的頭像
    榮尼王

    Ronny's BLOG

    榮尼王 發表在 痞客邦 留言(1) 人氣()