php筆記: 不定長度切割字串

在php上遇到字串有唯一且固定的字元例"time,day,month"固定間隔都有逗號,可用explode()將字串切割成矩陣然後再取出目標值。

遇到要將客戶填寫的銀行名稱例: 工商銀行湖南省長沙分行,從這類字串取出銀行名稱、省份,這個不論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"); //即會顯示"工商銀行"
  • 依此類推.....
錯亂的天氣下有些落羽松還是紅了。2017年元旦攝於台中后里泰安國小後面私人落羽松園


這個網誌中的熱門文章

沒印表機沒關係 便利商店找印去

被時代淘汱的英文怎麼說

探訪神秘的烏法魯神殿

色情廣告視窗關不掉? 動手解解看吧~

玩轉水晶石工作室 妝點個人部落