株式会社プロネット

 

WEBシステム開発、ITコンサルティング、自社サービス、教育事業 - これからのビジネスへのIT活用ソリューションをご提案致します。

SplFileObjectで読み込んだCSVの文字化け対策

2016.2.17(Wed) 22:16 | PHP | sofuku

PHPでCSVファイルを読み込む際に、パフォーマンスが良いということでSplFileObjectを使ってみました。

読み込んだデータを見てみると…全角文字が文字化けしています。

mb_convert_encodingではエンコードできず、困ったのでメモ。

 

環境

PHP:5.5.9

 

mb_convert_variablesを使う

SplFileObjectは文字列ではなくObjectなので、mb_convert_encodingは使えません。

この場合、mb_convert_variablesを使います。

function csv_to_array($filepath) {
  $csv_obj = new SplFileObject($filepath);
  $csv_obj->setFlags(SplFileObject::READ_CSV);
   
  // csv格納配列
  $results = array();
  foreach ($csv_obj as $line) {
    // 空行をスキップする
    is_null($line[0]) {
      continue;
    }
    $results[] = $line;
  }
   
  // エンコーディング
  mb_convert_variables('UTF-8', array('SJIS-win'), $line);
  return $results;
}

mb_convert_variablesの引数には以下を指定します。
第1引数:変換後の文字エンコーディング。
第2引数:配列またはカンマ区切りの文字列で変換前のエンコーディングを指定。
第3引数:変換する変数への リファレンス。

詳しい使い方はこちらを参考にしてみてください。