質問: PHPについて質問です。 ある文字列 [ $prtString ] があります(マルチバイトを含む)。 この文字列は、 mb_detect_encoding($prtString); すると EUC-JP が返って来ます。 この文字列をcsv形式で書き出そうと思っているのですが、 mb_convert_variables("EUC-JP","auto",$prtString); print($prtString); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=download.csv"); とすると、問題なく文字コードEUCで書き出されるのに、 mb_convert_variables("SJIS","auto",$prtString); print($prtString); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=download.csv"); とすると、Shift-JISでファイルを開いても日本語が化け化けになってしまいます。 EUC-JPの文字列をSJISで書き出す方法が 何か間違っているのでしょうか? 教えて下さい。 ちなみに、上記ソースを書いたPHPソースそのものの文字コードはEUCです。 これが問題なのでしょうか? (このソースの文字コードは変更できません)
回答: では、mb_detect_encodingで、strictモードが選択できるようになっていますが、 試されてみたでしょうか。 また、参考になるかはわかりませんが、 ・私もそんな状況で困ったのですが、auto指定ではうまくいかず、autoのところを、 EUC-JPとわかっていた場合、EUC-JPときちんと指定した場合はうまくいったパターンがありました。 ・mb_convert_variablesと内部的な同じ動作かもしれませんが、mb_convert_encodingも試してみてください。 ・headerのContent-Typeに、charsetを指定してみたらよいかもしれません。