Tôi đang viết một hàm để xử lý đầu ra CSV bằng cách sử dụng fputcsv()
. Tôi đã làm việc xung quanh vấn đề \r\n
đáng sợ mà rất nhiều người đã có với fputcsv()
(xem mã).Khi tạo tệp CSV, làm cách nào để xử lý n và r ký tự trong một trường?
Bây giờ tôi đang cố gắng tìm ra cách xử lý \r
hoặc \n
ký tự được bao gồm trong một trường (không phải dòng kết thúc trả về \r\n
). Nó có nên được thoát bằng cách nào đó trước khi được chuyển vào fputcsv()
không?
Chức năng xử lý thoát tốt cho hầu hết các ký tự. Tuy nhiên, khi một số \n
được chèn vào một trường, cả MS Excel và Google Documents đều gặp sự cố với số \n
và CSV không tải đúng.
/*
* 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;
}
}
Tôi có nên thay thế \ n và \ r trong các trường có khoảng trống không? – jjwdesign
Câu hỏi liên quan: [Tạo tệp CSV cho Excel, cách có một dòng mới bên trong một giá trị?] (Http://stackoverflow.com/questions/1241220/generating-csv-file-for-excel-how-to-have- a-newline-inside-a-value) – Anne
Tôi đã làm việc trên một cái gì đó như thế này trước đây, CSV là một điều khủng khiếp để làm việc với, bạn thậm chí có thể phải đối mặt với các vấn đề như các lĩnh vực có chứa biểu tượng bao vây hoặc tách của bạn. Cuối cùng tôi phải chọn một số ký tự ngôn ngữ kỳ lạ cho những ký hiệu đó và chạy qua một tập lệnh dài để kiểm tra \ n \ r và đảm bảo có đủ ký tự bao vây và tách. –