CSV(Comma-Separated Values,逗號分割值),就是用純文本的形式存儲表格數據,最大的特點就是方便。
作為開發,我們經常面臨導數據的問題,特別是後台系統,產品或者運營的同事常常會提需求。
Emmm,實話説,直接用 PHPExcel 也是 OK 的,不管是 WPS Office 或者微軟 Office,都能完美支持。
但我還是比較喜歡 CSV,原因是容易實現。有時候跑腳本、寫爬蟲抓數據,純文本拼接後輸出真的非常舒服。
當我遇到了幾個問題:
- 發現如果原來的文本帶有回車或者換行,拼接後整行就斷開了;
- 加引號可以解決,但是引號中間有引號怎麼辦?用
\轉義也不行; - 逗號怎麼辦?
於是翻了谷歌,看到維基百科有 逗號分隔值 的標準化定義:
- 以(CR/LF)字符結束的DOS風格的行(最後一行可選)。
- 一條可選的表頭記錄(沒有可靠的方式來檢測它是否存在,所以導入時必須謹慎)。
- 每條記錄“應當”包含同樣數量的逗號分隔字段。
- 任何字段都可以被包裹(用雙引號)。
- 包含換行符、雙引號和/或逗號的字段應當被包裹。(否則,文件很可能不能被正確處理)。
- 字段中的一個(雙)引號字符必須被表示為兩個(雙)引號字符。
好像也不難 :)
關鍵就是最後那兩點——不多説,直接看代碼:
function csv_string($s)
{
return '"'. str_replace('"', '""', trim($s)) .'"';
}
$value1 = csv_string($value1);
$value2 = csv_string($value2);
$value3 = csv_string($value3);
$line = "{$value1},{$value2},{$value3}\r\n";
簡單粗暴。
文章來源於本人博客,發佈於 2018-06-02,原文鏈接:https://imlht.com/archives/145/