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;
}
}
}