dポイントプレゼントキャンペーン実施中!

csvファイル出力時に文字化けしてしまう。

csvファイルを作成して、保存してExcelで開くと文字化けしてしまいます。

保存するときに「右クリック→ファイルの保存」ではなく、「左クリック」するとデータがブラウザ上(FireFoxで確認)で観れるのですが、その時は文字化けしていません。

また、保存したファイルをTeraPadで開くと文字化けしませんでした。



ファイルの保存方法は、

$csvFile = 'entry.csv';
$csvData = "適当なデータ・・・・・・・・・・・・・・";
$fp = fopen($csvFile, 'ab');
flock($fp, LOCK_EX);
ftruncate($fp,0);
fwrite($fp,$csvData);
fclose($fp);

htmlのヘッダーには、
<meta http-equiv="Content-type" content="text/html; charset=utf-8">

を入れております。

以上よろしくお願いします。

A 回答 (4件)

ヘッダにutf-8って書いてあってfirefoxでちゃんと見えるのなら、


そのcsvファイルはutf-8で書いてあるんでしょう。それをExcelで開
けば、見えないのが当然です。Excelはutf-8非対応ですから。

phpのマニュアルで「マルチバイト文字列」に関するあたりを読み、
日本語版Excelで対応できるエンコーディングで出力して下さい。
具体的にはfwriteの中で$csvDataを加工してやるだけでいいんじゃ
ないですかね。ザッと見た感じでは、Shift_JISかutf-16あたりがよ
さそうです。

私的には、csvをExcelで開くのは負け組ですけどね。あいつは勝手
な解釈で余計なことをするから。

参考URL:http://php.benscom.com/manual/ja/book.mbstring.php
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

>Excelはutf-8非対応ですから。

そうなんですね!!
だからか~

>私的には、csvをExcelで開くのは負け組ですけどね。あいつは勝手
な解釈で余計なことをするから。

え?そうなんですか??
ただ、今回はユーザーさんに使ってもらうプログラムを作りたいので、Excelが一番扱いやすいかな~って思っています。


参考URLもありがとうございます。

fwrite($fp,mb_convert_encoding($csvData,'SJIS','UTF-8'));

と書き直して旨く行きました!!

ありがとうございます。

お礼日時:2010/07/07 21:15

ExcelはUTF-8には対応していないようです。


Shift-JIS、UTF-16等で保存してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

そうみたいですね!全く知りませんでした。
#2さんの方法で旨く行きました!!

ありがとうございます。

お礼日時:2010/07/07 21:18

確実にやるならPEARのSpreadsheet_Excel_Writerあたりで


直接xls形式にデータを吐き出してやってください。

http://pear.php.net/manual/ja/package.fileformat …

なおその場合でも文字形式はSJISに変換してやる必要はあります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

うっ!PEARですか・・・まだPHPも覚えたてですので、折角の参考URLを見ましたが理解できませんでした。。。

PHPが解ってきたら挑戦してみますね。
ありがとうございました。

お礼日時:2010/07/07 21:17

出力されるファイルの文字コードはなんで書かれていますか?



また、「適当なデータ」の文字コードは何で書かれていますか?

それがあっていなければ、文字化けします。

この回答への補足

早速の回答ありがとうございます。

それは何処で設定すれば良いのでしょうか?

文字コードに関する宣言的な事は、metaタグ以外では何も無いです。

適当なデータは、フォームに入力されたデータ($_POST[...]で取得)、APIを使ってデータを使っています。

何処で、そういった宣言をすればいいのでしょうか?

補足日時:2010/07/07 18:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!