我已經使用爆炸函數來獲取textarea的包含到基於行的數組中。當我在我的本地主機(WAMPserver 2.1)運行這段代碼符合本規則很好地工作:爆炸錯誤 r n和 n在Windows和Linux服務器
$arr=explode("\r\n",$getdata);
當我上傳到我的Linux服務器,我需要每次更改上面的代碼爲:
$arr=explode("\n",$getdata);
什麼將是我永久的解決方案。哪些常見的代碼適用於我的兩臺服務器?
謝謝
我已經使用爆炸函數來獲取textarea的包含到基於行的數組中。當我在我的本地主機(WAMPserver 2.1)運行這段代碼符合本規則很好地工作:爆炸錯誤 r n和 n在Windows和Linux服務器
$arr=explode("\r\n",$getdata);
當我上傳到我的Linux服務器,我需要每次更改上面的代碼爲:
$arr=explode("\n",$getdata);
什麼將是我永久的解決方案。哪些常見的代碼適用於我的兩臺服務器?
謝謝
恆定PHP_EOL包含依賴於平臺的換行,所以你可以試試這個:
$arr = explode(PHP_EOL, $getdata);
但更好的是標準化的文本,因爲你永遠不知道什麼操作系統上的訪客使用。這是一種方式,以標準化爲僅可使用\ n作爲換行符(但也看到亞歷克斯的答案,因爲他正則表達式將處理所有類型的換行的):
$getdata = str_replace("\r\n", "\n", $getdata);
$arr = explode("\n", $getdata);
的PHP_EOL常量包含主機操作系統的的字符序列新隊。
$arr=explode(PHP_EOL,$getdata);
你可以使用preg_split()
這將使不管它的工作:
$arr = preg_split('/\r?\n/', $getdata);
好,最好的辦法是標準化輸入數據只使用\n
,像這樣:
$input = preg_replace('~\r[\n]?~', "\n", $input);
由於:
\n
。\r\n
。\r
。儘管如此,通過\n
爆炸應該得到最好的結果(如果你不正常化)。
據我所知分裂由換行符的字符串的最佳方式是preg_split
和\R
:
preg_split('~\R~', $str);
\R
匹配任何Unicode行序列,即不僅LF
,CR
,CRLF
,也更奇特諸如VT
,FF
,NEL
,LS
和PS
。
如果不需要這種行爲(爲什麼?),你可以指定BSR_ANYCRLF
選項:
preg_split('~(*BSR_ANYCRLF)\R~', $str);
這將只匹配「經典」換行序列。
雖然有些操作系統使用\ r作爲換行符,但您也需要處理。 – GordonM 2011-04-24 08:54:37
GordonM,你是對的。十年前的Mac OS 9使用\ r(以及80年代的一些系統),但我認爲任何人都不會在舊軟件上運行Web服務器。 – 2011-04-24 09:00:13
確實夠不錯,但它絕不會讓你的基地受到影響:) – GordonM 2011-04-24 09:01:11