php筆記: 不定長度切割字串
在php上遇到字串有唯一且固定的字元例"time,day,month"固定間隔都有逗號,可用explode()將字串切割成矩陣然後再取出目標值。
遇到要將客戶填寫的銀行名稱例: 工商銀行湖南省長沙分行,從這類字串取出銀行名稱、省份,這個不論explode()、preg_split()、preg_match()就不是很好使。這時可以應用strpos()+substr()從字串中來取出不確定長度的字串。
遇到要將客戶填寫的銀行名稱例: 工商銀行湖南省長沙分行,從這類字串取出銀行名稱、省份,這個不論explode()、preg_split()、preg_match()就不是很好使。這時可以應用strpos()+substr()從字串中來取出不確定長度的字串。
用法要點:
- 用strpos()找出對應的字元位置,可以搭配strlen()算出所要掫取的長度。
- 然後用substr()按指定位置及長度就可取出目標的字串。
來源字串內含中文時:
- 若來源字串非utf-8時,先用iconv()將來源字串轉為utf-8,例: iconv( "big5", "UTF-8", Big5字串);
可以用echo mb_detect_encoding(來源字串)顯示及確認來源字串編碼。 - 所有函數都必須用有mb_開頭的函數,例:mb_substr()、mb_strpos()、mb_strlen(),來源字串為UTF-8且函數最後一定要設"UTF-8"不然取用的位置會不正確,很重要說3遍。
mb_strpos(來源字串,關鍵字,0,"UTF-8")
mb_substr(來源字串,起始字元數,長度,"UTF-8");和substr()不同mb_substr()長度不可省略
mb_strlen(來源字串,"UTF-8") - 若想用substr()或strpos()也沒關係,但要自行計算字元數,英文字母1個字元,utf-8編碼的中文字3個字元。
範例:
- 來源字串:$str="工商銀行湖南省長沙分行";若頁面或資料庫即為utf-8就不用再處理
- 取出字串起始至銀行前的字元數:$po1=mb_strpos($str,"銀行",0,"UTF-8");
- 字串起始至銀行的長度:$len1=$po1+2;//在此種用法下銀行長度為2
- echo mb_substr($str,0,$len1,"UTF-8"); //即會顯示"工商銀行"
- 依此類推.....