壁紙與壁布從低價的機器印刷製品 到高貴的手工繪製品,都有多樣款式 | 拆除專家,專業機具施工 師傅精湛技術,拆除工程輕鬆搞定 |
[php] 切割字串 |
房東:阿凱 發表時間:2012-02-03 | [檢舉] |
preg_split -- 正規表達式切割字串
will yield
http://www.php5.idv.tw/modules.php?mod=books&act=show&shid=711 | ||||
廣利不動產-新板特區指名度最高、值得您信賴的好房仲 您的托付,廣利用心為您服務 廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲 完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心! |
1 樓住戶:小彭 發表時間:2012-02-05 | [檢舉] |
php提供 explode() 可以將自串利用特定字元切割,並存入陣列中... 用法: $pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza); echo $pieces[0]; // piece1 echo $pieces[1]; // piece2 上面這一段是將$pizza中的字串利用空白字元" "下去做分隔。存入$pieces陣列中。 $即將被存入的陣列變數 = explode("分隔符號",要被切割的字串); |
2 樓住戶:阿瑄 發表時間:2012-02-05 | [檢舉] |
PHP中的substr是以位元組來切割字串,如: $content = "這是 bruse 的測試"; echo substr($content,0,15)." "; 在UTF-8的編碼下,因為中文字為3位元組,第15位元組是中文字三位元組中央,所以會印出: 這是 bruse 皼br> 其中可以看到"的"的前二位元組會把 的"<"拿去組字,造成中文字和程式碼的錯誤。 有一種方法可以解決這個問題,就是使用mb_substr,並帶編碼,如: $content = "這是 bruse 的測試"; echo mb_substr($content,0,15,"UTF-8"); 使用mb_substr可以設定編碼,中文字會被判斷是1個字,因為content只有13字,所以15個中英文會全部印出: 這是 bruse 的測試 這樣是解決了切中文字的問題沒錯,但有時我們要把資料存進資料庫或是呈現出來,這時15個中文字並非是15個位元組,會造成程式的錯誤。 所以,我們必須改寫substr,使用位元組的方式計算長度,但又不能出現中文字切割的錯誤,我們改寫substr為utf8_substr,程式如下: function utf8_substr($StrInput,$strStart,$strLen) { //對字串做URL Eecode $StrInput = mb_substr($StrInput,$strStart,mb_strlen($StrInput)); $iString = urlencode($StrInput); $lstrResult=""; $istrLen = 0; $k = 0; do{ $lstrChar = substr($iString, $k, 1); if($lstrChar == "%"){ $ThisChr = hexdec(substr($iString, $k+1, 2)); if($ThisChr >= 128){ if($istrLen+3 < $strLen){ $lstrResult .= urldecode(substr($iString, $k, 9)); $k = $k + 9; $istrLen+=3; }else{ $k = $k + 9; $istrLen+=3; } }else{ $lstrResult .= urldecode(substr($iString, $k, 3)); $k = $k + 3; $istrLen+=2; } }else{ $lstrResult .= urldecode(substr($iString, $k, 1)); $k = $k + 1; $istrLen++; } }while ($k < strlen($iString) && $istrLen < $strLen); return $lstrResult; } $content = "這是 bruse 的測試"; echo utf8_substr($content,0,15); 上面的程式碼如果遇到切在中文字中,就會跳出,所以會印出: 這是 bruse 這樣就解決了以上的問題,不過呈現時若使用strlen判斷長度再切,因為中文在UTF-8中是三個位元組,而英文是一個位元組,但中文和英文的字寬度並不到三倍,大約只有一倍,所以會變成長度差太多,此時,我們就得連strlen也改寫,這個以後再介紹。 |