我們常在什麼 XX 列表上,有時候因為一行文字過長,所以會有想把文字做截斷的動作,比方說 『i love you so much, do you know』,假設這段文字剛好擺進 div 時就是會過長,所以我想要把他截斷成 『i love you so much, do...』,最後還故意加了 ... 來表示。
假設這個問題只會發生在單行文字,那我會建議你用 css 的 ellipsis 解決掉,因為單行的段字做 ... 結尾用 css 蠻快的,但是發生在兩行或三行是就不能用 css 了。
這裏有一段很簡陋的程式碼,用意是每一筆 title 我都會判斷它的長度是否超過我認為的最常的可能性 (目前看起來是我希望他不要超過 39 個字),過長我就會用 substr 把它截斷,從第 0 個位子截到 39,最後補上 ... 字串:
不過很可惜這樣的做法有問題,我假設我存在資料庫的字串都是正確的字符編碼,可是經過這個 substr 截出來的字串,卻讓我得 � 奇怪的詭異符號,為什麼?!
經 google 發現原來 substr 算的是 bytes 而不是 characters,取而代之的是,如果你使用 mb_ 開頭的 function,可以額外處理 multi-byte encodings 的部分。
後來我用 mb_substr 將以上的程式碼改寫了一下: (要注意 function 的參數跟 substr 數量不太一樣)
每次在追這種怪問題都覺得心疲,但是得到解答後就覺得好多了
這個需求讓我想到以前工作的一些經驗,因為英文字跟中文字算出來的大概要擷取的數量是不一樣的,所以... 挺麻煩的。有時候 不要為了一些沒必要的堅持而堅持。
如果還有什麼不瞭解的地方可以 google substr vs mb_substr。
只是我還是不知道,到底在什麼情況下,我們會只用 substr ?
這個需求讓我想到以前工作的一些經驗,因為英文字跟中文字算出來的大概要擷取的數量是不一樣的,所以... 挺麻煩的。有時候 不要為了一些沒必要的堅持而堅持。
如果還有什麼不瞭解的地方可以 google substr vs mb_substr。
只是我還是不知道,到底在什麼情況下,我們會只用 substr ?
只處理 ISO 8859-1 資料時才用 substr,處理 UTF-8 最好都用 mb_* 系列的 function。
回覆刪除謝謝 :D
刪除substr 可以用在產生特定的亂數密碼
回覆刪除EX:
用帳號,EMAIL,電話,日期來產生一組亂數認證密碼
md5(substr(md5($access).md5($mail).md5($phone).md5(date('y-m-d H:i:s')),0,5));
然後把產生出來的這個東東接到網址和DB
哦!! 原來還有這招
刪除懂了 謝謝你!
只有英文,沒有其他語言時?
回覆刪除那應該很好用?! XD
刪除Laravel 提供了 一个 helper str_limit
回覆刪除