fgetcsv

0pt

PHPCSV読み込む関数。

ロケールによって文字コードの処理の仕方が違う

setlocale(LC_ALL, 'ja_JP.UTF-8');

とすればOK

WindowsではできたけどUnixでは動かない場合や、日本語だけうまく入らない場合はロケールが間違ってる可能性がある。


これをやっても全角英字や「~」が文字化けする!!
使うな、との声多数なのでもうこの関数は信用しない!というわけで自作した。

簡単なテストは通ったけど、よく見たらエスケープの処理が怪しいかも

<?php
class Mindia_Csv{
    private $data = array();
    private $separator = ",";

    function toArray(){
        return $this->data;
    }
    
    function parse($string){
        $len = mb_strlen($string);
        $row = array();
        $col = ""; 
        $quoted = false;
        $prev = "";
        for ($i = 0; $i < $len; $i++){
            $char = mb_substr($string, $i, 1);
            if ($char === "\n" && !$quoted){
                $row[] = $col;
                $this->data[] = $row;
                $row = array();
                $col = "";
            }else if ($char === "\r"){
            }else if ($char === $this->separator && !$quoted){
                $row[] = $col;
                $col = "";
            }else if ($char === '"'){
                if ($prev === $char){
                    // escape quote
                    $col .= '"';
                }else{
                    if ($quoted){
                        // end quote
                        $quoted = false;
                    }else{
                        // start quote
                        $quoted = true;
                    }
                }
            }else{
                $col .= $char;
            }
            // to detect escape quote
            $prev = $char;
        }
        if (!empty($row) || $col !== ""){
            $row[] = $col;
            $this->data[] = $row;
        }
    }
}

「fgetcsv」について友人に書いてもらう。

あなたにとって「fgetcsv」とは?

ログインするとワンクリックでキーワードを投稿できます

ログインする 新規登録する

関連したキーワードを持つお気に入り

他の人の「fgetcsv」を見る