我正在寫一個函數來處理CSV輸出使用fputcsv()
。我已經解決了很多人與fputcsv()
(見代碼)有關的可怕\r\n
問題。創建CSV文件時,如何處理字段中的 n和 r字符?
現在我試圖弄清楚如何處理\r
或\n
包含在字段中的字符(而不是行結尾返回\r\n
)。它應該在被傳入fputcsv()
之前以某種方式逃脫?
該函數可以很好地處理大多數字符。但是,如果將\n
插入字段中,則MS Excel和Google文檔在\n
上存在問題,並且CSV無法正確加載。
/*
* Revised Get CSV Line using PHP's fputcsv()
*
* Used to correct an issue with fputcsv()
* http://stackoverflow.com/questions/4080456/fputcsv-and-newline-codes
* MS Excel needs the MS Windows newline format of \r\n
*
*/
if (!function_exists('get_csv_line'))
{
function get_csv_line($list, $seperator = ",", $enclosure = '"', $newline = "\r\n")
{
$fp = fopen('php://temp', 'r+');
fputcsv($fp, $list, $seperator, $enclosure);
rewind($fp);
$line = fgets($fp);
if ($newline && $newline != "\n") {
if ($line[strlen($line)-2] != "\r" && $line[strlen($line)-1] == "\n") {
$line = substr_replace($line,"",-1) . $newline;
} else {
die('original csv line is already \r\n style');
}
}
if ($newline == "\r\n" && substr($line, -2) != "\r\n") {
log_message('error', 'function get_csv_line: Error, needs \r\n to be MS Excel friendly!');
}
return $line;
}
}
我應該用空格替換字段中的\ n和\ r嗎? – jjwdesign
相關問題:[爲CSV生成CSV文件,如何在一個值內有一個換行符?](http://stackoverflow.com/questions/1241220/generating-csv-file-for-excel-how-to-have- a-newline-value-value) – Anne
我之前就曾經做過類似的事情,CSV是一件可怕的事情,你甚至可能會遇到包含你的圈套或分離符號的字段等問題。我最終不得不爲這些符號選擇一些外來語言字符,並運行一個非常長的腳本來檢查這些符號,並確保有足夠的外殼和分隔字符。 –