前提・実現したいこと
PHPとMYSQLを使って、あるデータ照会システムを作成しています。
DBのデータをCSVファイルでダウンロードする処理を作成しましたが、
保存されたファイルを開くと日本語部分が文字化けしています。
それ自体の原因は作成されたCSVファイルの文字コードがUTF-8形式になっているためで、
TeraPad等で、文字コードを指定して開く(Shift-JIS)と日本が表示されます。
mb_convert_encodingを用いていますが、Shift-JIS形式に変換されていないようです。
Shift-JIS形式でファイルを作成するにはどうしたらよいのでしょうか?
また、CSVファイルをShift-JISで開いても、先頭が文字化けしています。
原因・対処方法などをご教示いただけると助かります。よろしくお願いいたします。
発生している問題・エラーメッセージ
保存されたデータがUTF-8形式になり、そのまま開くと文字化けが発生しています。 【普通に開く】 ?N???u,????,?x,?Ζ± 2018-10-01,???¢???|?¨,,1 2018-10-02,???¢???|?¨,?x, Shift-JISで再読み込みすると 【Shift-JISで再読み込み】 ・ソ年月日,氏名,休,勤務 ←先頭に何か付与されている?? 2018-10-01,あいうえお,,1 2018-10-02,あいうえお,休,
該当のソースコード
PHP
1$sql="select * from t_test"; 2$stmt=$pdo->prepare($sql); 3$stmt->execute(); 4 5//CSV生成 6$csvstr="年月日,氏名,休,勤務\r\n"; //見出し 7while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 8 $csvstr .= $row['年月日'] . ","; 9 $csvstr .= $row['氏名'] . ","; 10 $csvstr .= $row['休'] . ","; 11 $csvstr .= $row['勤務'] . "\r\n"; 12} 13//CSV出力 14$fileNm="data.csv"; 15header('Content-Type: text/csv'); 16header('Content-Disposition: attachment; filename=' . $fileNm); 17echo mb_convert_encoding($csvstr,"SJIS-win","UTF-8"); 18exit();
試したこと
下記URLを参考に処理を作成しました。
[https://php.programmer-reference.com/php-mysql-csv-download/]
補足情報(FW/ツールのバージョンなど)
XAMPP for Windows 7.1.6
-Apache 2.4.25(Win32)
-PHP 7.1.6
-MySQL 15.1
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/24 01:39 編集
2018/10/24 01:43
2018/10/24 02:04
2018/10/24 02:14
2018/10/24 03:16
2018/10/24 03:18
2018/10/24 04:10