2017年2月24日 星期五

【PHP】使用 fgetcsv() 讀取文件會出現不必要的引號

最近在做網站架設 ,需要使用 fgetcsv() 讀取 csv 文字檔,但每次都會出現不必要的雙引號。原始的 csv 檔是有雙引號沒錯,但折解之後應該要消失才對。

test.csv 內容如下:
"aaa","bbb","ccc"
"aaa","bbb","ccc"

檔案上傳後,在php 呼叫
$fp = fopen($_FILES['upload']['tmp_name'], 'r+');
while($row = fgetcsv($fp, 0, $separator)){
    $rows[] = $row;
}
echo "<pre>".print_r($rows, 1)."</pre>"; exit;

顯示如下結果:

Array
(
    [0] => Array
        (
            [0] => "aaa"
            [1] => bbb
            [2] => ccc
        )

    [1] => Array
        (
            [0] => aaa
            [1] => bbb
            [2] => ccc
        )

)
第一行第一個元素總是很奇怪的會出現多餘的雙引號。後來發現這個問題跟 UTF8 的 BOM 有關。這篇文章提供了一些說明跟解法:

$str = file_get_contents('yourfile.utf8.csv');
$bom = pack("CCC", 0xef, 0xbb, 0xbf);
if (0 === strncmp($str, $bom, 3)) {
    echo "BOM detected - file is UTF-8\n";
    $str = substr($str, 3);
}

廣告連結

新北搬家台北市搬家中和搬家板橋搬家 
雙喜搬家新北搬家台北市搬家中和搬家板橋搬家

沒有留言:

張貼留言