2014-12-27 81 views
-1

我一直在努力使用PHP換行符。我同意以下事實:PHP_EOL提供了一個基於OS的平臺中性換行符(\ r,\ r \ n,\ n),我們可以充分利用這一點。爲什麼PHP_EOL在每行的末尾寫入 r n

我正在使用XAMPP在我的Mac OS(Yosemite)中執行一個簡單的PHP文件讀寫操作。

以下是我寫入文件的代碼。

$handle = fopen("test.txt", "a+"); 

$data = "Hello World." . PHP_EOL; 

fwrite($handle, $data); 

該文件中的輸出如下給出。

Hello World.\r\n 

注意:我用fwrite()和file_get_contents()都測試過了。沒有區別。

我的問題是:在通過使用PHP_EOL寫入文件寫入文件時,爲什麼它在行尾寫入\ r \ n?

我通過調用nl2br()函數插入換行符(HTML換行符)沒有問題。但是,由於這個字符,我的HTML輸出有這個\ r \ n字符!

我一直在玩弄很多不同的選擇,如下

$line = str_replace("\r\n","<br/>",$line); // Does NOT work! 
$line = preg_replace('~\r?\n~','<br/>', $line); // Works as that of nl2blr()! 
$line = str_replace(PHP_EOL, "<br/>",$line); // Works as that of nl2br()! 

上方插入該選項的HTML換行符但沒有刪除這個「\ r \ n」從實際的文字!

我通過手動輸入幾行來測試(顯然沒有\ r \ n),並且此讀取方法在沒有任何\ r \ n的情況下完美運行。因此,我認爲{PHP_EOL +文件寫入方法}可能是罪魁禍首!

我真的很困惑我錯過了什麼?

任何幫助將不勝感激。

在此先感謝。

+0

爲什麼有人投下了這個問題? – itsraghz

回答

1

沒有雙引號,PHP不會處理特殊字符,應該按照您的預期進行替換。

$line = str_replace('\r\n',"<br/>",$line); // note '\r\n' not "\r\n"

+0

謝謝。有用。不過,我有一個問題。專家的建議是不要取代任何東西,而只是使用nl2br()本身。然而,\ n仍然保留着nl2br()!任何建議? – itsraghz

+0

@itsraghz我認爲可能在編碼或解碼的某個地方,你的EOL字符被記錄爲標準文本,而不是實際的EOL字符(第10和13號)。我不知道在沒有看到所有代碼的情況下發生了什麼。最安全的方式可能是這樣的,用實際的EOL字符替換'\ r \ n',然後像其他人那樣使用內置的'nl2br()': '$ line = nl2br(str_replace('\ r \ n',PHP_EOL,$ line));' –

+0

謝謝。那麼,這只是一個演示/練習,我正在從一個文件中讀取,我已經粘貼了它的關鍵。讓我試試你的建議,並回來尋求進一步的幫助! – itsraghz