Tag: quotes

強制 fputcsv 所有欄位都加上雙引號

Posted by – August 2, 2016

公司跟一家新廠商展開合作,其中交換電文是用 CSV 格式。但對方要求所有的欄位都要用 " 雙引號包起來。看起來就像下圖這樣。

Screen Shot 2016-08-02 at 2.58.00 PM

但是很不巧的,PHP 內建產生 CSV 的指令 fputcsv 沒有提供強制的選項。做出來的檔案如下圖。

Screen Shot 2016-08-02 at 3.03.33 PM山不轉只好路轉...

在丟進 fputcsv 前就先用雙引號包一包。

<?php

function forceQuote($value) {
    return "\"$value\"";
}

$file = @fopen($file_path, "w");

foreach ($data['content'] as $line) {
    fputcsv(
        $file,                          // 輸出檔名
        array_map('forceQuote', $line), // 先包雙引號
        ',',                            // 資料用逗號分隔
        chr(0)                          // 跳脫預設的 enclosure 字元
    );
}

fclose($file);

比較特別是 fputcsv 原本的 enclosure 字元預設就是雙引號,無法替換成空白,只好用 chr(0) 來跳脫,不然每一筆資料會變成 """aaa""",三個引號…

這樣就可以交差了。