2012-07-03 54 views
1

之間這是我的Windows機器它完美的代碼編碼問題,Windows和Linux

$data['rate_change_with'] = iconv('UTF-8', 'ISO-8859-15//TRANSLIT', $data['rate_change_with']); 
$rate_change_with_index_array = preg_split('/\s+/', $data['rate_change_with']); 

。但在Ubuntu 12.04上,它打破了。 preg_split沒有效果。 $ data ['rate_change_with']就像

3.3 (spaces/tabs) 4.5 (spaces/tabs) 6.5 

請幫助!

感謝

編輯:空格和製表符是「不同」型空間/換行符混合物,我不知道。 EDIT2:不知道這是否會幫助,但這裏是目標的調試器的截圖:http://i.imgur.com/Mwria.jpg

EDIT3:實際示例:http://dl.dropbox.com/u/7998366/de.html。最右邊的列是問題

編輯4:將 更改爲空格不起作用!我究竟做錯了什麼 ??

+0

也許php需要一些系統提供的正則表達式軟件......但是我不這樣做...... – evotopid

+0

在Ubuntu 11.04上測試了輸入「'3.3 4.5 6.5'」,輸出似乎正確分裂。我非常懷疑它會在11.04和12.04之間被打破。儘管如此,對於示例輸入,'iconv'將不起作用,因爲它僅包含ASCII字符。 – lanzz

+0

@lanzz感謝您的測試,但目標字符串實際上包含一些奇怪的換行符/空格。 –

回答

0

解決方案:

$data['rate_change_with'] = ereg_replace("[^A-Za-z0-9\-\./]", " ", $data['rate_change_with']) ; 
$rate_change_with_index_array = preg_split('/\s+/', $data['rate_change_with']); 

基本上我無法弄清楚這是目前焦炭這是造成問題的原因,因此,上述簡單地刪除所有字符除了白名單中的,從而消除了任何奇怪的字符在那裏存在。