fgetcsv 日本語消える

PHPでSJIS-winの文字コードのCSVを読み込んで、UTF8に変換してファイル作り直してから読み込んでいるのに、
なぜか日本語が途切れたり、文字化けしたりする現象が発生。
文字コード変換前に出力してみると内容は問題なさそうなのに・・・

PHPの問題?というわけではないかもしれませんが、ロケールを正しく指定していないと発生するようです。
マルチバイト関係の関数を利用する前に下記コードを指定したらうまく行った。

<?php
setlocale(LC_ALL, 'ja_JP.UTF-8'); //これが重要

$list = array();
$tmpData = file_get_contents($_FILES["file"]["tmp_name"]);
$tmpData = mb_convert_encoding($tmpData,"UTF-8","SJIS-win");

$fp = tmpfile();
fwrite($fp, $buffer);
rewind($fp);

while (($data = fgetcsv($fp, 0, ",")) !== FALSE) {
    $list[] = $data;
}
?>

シェアする

  • このエントリーをはてなブックマークに追加

フォローする