這篇來介紹一下,最近小菜鳥在匯出及匯入上所使用到的,切字,算字,補字的功能
先從算字開始講起! 計算文字的方法有三種 , 差別在於對於中文字的計算不一樣
strlen : 這個計算方法會將中文字計算成三個字元
strlen('測試AAA') // 9個字元
mb_strlen : 這個計算方法會將中文字算成一個字元,第二個參數可以傳入要判斷的編碼
mb_strlen('測試AAA','UTF-8') // 5個字元
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
講到這邊頭已經有點暈了...各種幾個字元幾個字元的,真的是會算到崩潰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