お世話になっております。
phpで「splFileObject::READ_CSV」を使いSJISのcsvデータを読込む処理をしているのですが、「splFileObject::READ_CSV」を設定するとデータの先頭の「松」の文字が消えてしまいます。
以下のようにしているのですがこの事について何かいい方法はないでしょうか?
よろしくおねがいします。
class myFilterableFileObject extends SplFileObject { protected $filter_func = null; public function __construct($filename, $filter_func = null) { if (is_callable($filter_func)) { $this->filter_func = $filter_func; } return parent::__construct($filename); } public function current() { $value = parent::current(); if (is_callable($this->filter_func)) { $filter_func = $this->filter_func; if($this->getFlags() & self::READ_CSV) { $temp = array(); foreach ($value as $element) { $temp[] = $filter_func($element); } $value = $temp; } else { $value = $filter_func($value); } } return $value; } } setlocale(LC_ALL, 'ja_JP.UTF-8'); setlocale(LC_ALL, 'ja_JP.EUC-JP'); setlocale(LC_ALL, 'ja_JP.Shift_JIS'); $file = new myFilterableFileObject($_FILES["upfile"]["tmp_name"], function($value){ return mb_convert_encoding($value, 'UTF8', 'SJIS'); }); //$file->setFlags(splFileObject::READ_CSV); //CSV読み込みモード←これを設定すると先頭の「松」の文字が消えてしまう。 foreach ($file as $value){ var_dump($value); } コード
あなたの回答
tips
プレビュー