2010-04-30 58 views
12

我有一個用下面的代碼生成一個CSV文件的腳本:沒有發出正確的新行PHP生成CSV提要

header('Content-type: text/csv'); 
header('Content-Disposition: attachment; filename="'.date("Ymdhis").'.csv"'); 
print $content; 

的$內容變量只包含用逗號分隔的字段行,然後用定型。 「\ n」 個;生成一個新的行。

當我在csv中打開文件時,它看起來很好,但是當我嘗試使用該文件導入到外部程序(MYOB)時,它無法識別行尾(\ n)字符並假定有一長行的文字。

當我認爲在記事本中的文件的內容,行字符(\ n)的端部是一個小的矩形框,它看起來像字符代碼0x7F的。

如果我打開該文件並將其重新保存在Excel中,它消除了這個角色,並與行字符的正確端替換它,我可以導入該文件。

什麼角色,我需要在PHP中被產生,這樣的記事本將其識別爲一個有效的結束換行符? (\ n)顯然不會完成這項工作。

回答

20

使用「\ r \ n」。 (用雙引號)

以上是回車+換行的ASCII字符。

從歷史上看,這涉及到在輸出打印到紙張上時,在傳真機上進行計算的早期時間,並且將電傳打印頭的托架返回到行的起始處是單獨操作以通過打印機進行傳送。您可以通過僅執行回車並通過換行插入空行來覆蓋行。兩人都將頭部放回線路的起始位置,並給它一條新的線路打印。只有

  • 換行: - -

    恰恰是需要什麼樣的系統之間的差別大多數的Unix類系統

  • 回車加換行: - DEC AMD基於MS-DOS系統
  • 回車符只: - 早期的Apple/Mac OS的

所以你現在生成的只是一個Unix系統上的換行符。維基百科對此有相當的good page

實際上也有unix命令行工具來進行轉換。 unix2dos和dos2unix命令通過將換行符轉換爲換行符和回車符以及反之亦然,在ASCII和DOS格式之間轉換ascii文本文件。

4

確保周圍使用\ r \ n雙引號,而不是在前面的答覆中提到的單引號!

0

我遇到了同樣的問題。稍後我將
單引號'用雙引號" 建築$ content變量。

即保持外引號,而不是單一的一倍$內容變量。

它的工作:)