S eda1a14b50ee24bcab19b62f40858e76 fgetcsv

PHPのCSV読み込む関数。

ロケールによって文字コードの処理の仕方が違う
setlocale(LC_ALL, 'ja_JP.UTF-8');
とすればOK

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

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

簡単なテストは通ったけど、よく見たらエスケープの処理が怪しいかも
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」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ