iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0
Modern Web

PHP框架-Symfony4 + api platform 系列 第 25

Day#25 被匯出匯入跟編碼搞到快崩潰的小菜鳥(`д´)-切割字串與計算字元長度

  • 分享至 

  • xImage
  •  

這篇來介紹一下,最近小菜鳥在匯出及匯入上所使用到的,切字,算字,補字的功能


先從算字開始講起! 計算文字的方法有三種 , 差別在於對於中文字的計算不一樣

  1. strlen : 這個計算方法會將中文字計算成三個字元

    strlen('測試AAA')   // 9個字元
    
  2. mb_strlen : 這個計算方法會將中文字算成一個字元,第二個參數可以傳入要判斷的編碼

    mb_strlen('測試AAA','UTF-8') // 5個字元
    
  3. mb_strwidth: 這個計算方法會將中文字算成兩個字元

    mb_strwidth('測試AAA') // 7個字元
    

切字的方法,最常用的有兩種,差別也在於計算字元的不同

1.substr : 通常拿來計算英文或數字字符, 如果拿來計算中文字的話,會被計算成三個字元,如果切割一個中文字,且不到三字元時,會出現亂碼

substr('測試AAA1',0,7)  // 結果為 測試A

2.mb_substr : 在編碼為utf-8下無論中英文或數字都計算為一個字元,第二個參數可以傳入要判斷的編碼

mb_substr('測試AAA',0,4,'utf-8') // 結果為 測試AA
如果要讓utf-8計算為兩字元的話,則需要自己另外寫function來判斷,方法可以用ascii code 來計算是否為中文字,是中文字的話,當成兩字元去切割,其餘都是一個字元

講到這邊頭已經有點暈了...各種幾個字元幾個字元的,真的是會算到崩潰R


最後來講個補字 , 補字其實php有提供函數給我們, 很方便, 看是要補在左邊,右邊,還是兩邊,都可以!!!

但這個函數,小菜鳥本人是推薦...最好是在欄位不會出現中文的時候使用,
因為小菜鳥在做匯出的時候,發現,有含中文字的欄位好像不能這樣,
因為中文字會以三個字元來做計算,怎麼樣都會對不齊....

str_pad : 第一個參數為要補字的欄位,第二個參數是文字總長度,第三個參數是要補的字,第四個參數是 要補在哪

str_pad('BBBBB',10,"A",STR_PAD_RIGHT); // 結果為 BBBBBAAAAA

如果要以utf-8來進行補字的話, 小菜鳥會使用str_repeat的方式,接在原字串前或後,
這樣我可以計算出字串長度,再用需要的總長度去減掉字串的長度,就知道要補多少字了

$name="黃小明";
$name.str_repeat("A",20-mb_strwidth($name))

//結果為  黃小明AAAAAAAAAAAAAA


上一篇
Day#24 Workflow 流程引擎 ~
下一篇
Day#26 Security設定檔裡設定Json_login
系列文
PHP框架-Symfony4 + api platform 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言