PHPについて質問です。PHPについて質問です。コンピュータウェブ制作PHPについて質問です。あります(マルチバイトを含む)。この文字列は、mb_detect_encoding($prtString);するとEUC-JPが返って来ます。filename=download.csv");とすると、Shift-JISでファイルを開いても日本語が化け化けになってしまいます。EUC-JPの文字列をSJISで書き出す方法が何か間違っているのでしょうか?教えて下さい。ちなみに、上記ソースを書いたPHPソースそのものの文字コードはEUCです。00:51:2035ptぱっと見て気になるのは、headerでの出力前にprintで出力しちゃって大丈夫?というのが気になります。この辺りは、デバッグ中と解釈すると、その他に明らかな問題はないような気がするのですが、$prtStringが文字列なのであれば、mb_convert_encodingを使ってはどうですか?あとは、せっかくmb_detect_encodingで確認しているのであれば、autoではなく、EUC-JPを指定してみては如何でしょうか?これ以外となると、PHPもしくはWebサーバ関連で出力時に文字コードの自動変換が機能しているというのが怪しい気がします。う~ん、なるほど、明らかな問題はない、ですか......。自分では問題がないつもりで作っているので困っちゃってるんですが(^^;headerとprintの順序は関係ないみたいですね。入れ替えても影響ないです。EUC-JPをautoで書いているのは質問にあたり問題を複雑化しないためで、そこはEUC-JPにしてみても変わりませんでした(元はといえば、autoがいけないのかなと疑ったために、mb_detect_encodingを使ったりしたのでした)。00:51:20ここでベストアンサー35ptぱっと見て気になるのは、headerでの出力前にprintで出力しちゃって大丈夫?というのが気になります。この辺りは、デバッグ中と解釈すると、その他に明らかな問題はないような気がするのですが、$prtStringが文字列なのであれば、mb_convert_encodingを使ってはどうですか?あとは、せっかくmb_detect_encodingで確認しているのであれば、autoではなく、EUC-JPを指定してみては如何でしょうか?これ以外となると、PHPもしくはWebサーバ関連で出力時に文字コードの自動変換が機能しているというのが怪しい気がします。う~ん、なるほど、明らかな問題はない、ですか......。自分では問題がないつもりで作っているので困っちゃってるんですが(^^;headerとprintの順序は関係ないみたいですね。入れ替えても影響ないです。EUC-JPをautoで書いているのは質問にあたり問題を複雑化しないためで、そこはEUC-JPにしてみても変わりませんでした(元はといえば、autoがいけないのかなと疑ったために、mb_detect_encodingを使ったりしたのでした)。試されてみたでしょうか。・私もそんな状況で困ったのですが、auto指定ではうまくいかず、autoのところを、EUC-JPとわかっていた場合、EUC-JPときちんと指定した場合はうまくいったパターンがありました。・mb_convert_variablesと内部的な同じ動作かもしれませんが、mb_convert_encodingも試してみてください。・headerのContent-Typeに、charsetを指定してみたらよいかもしれません。する→念のため再度確認してみましたが結果に影響なし・mb_convert_encodingにしてみる→結果に影響なし・Content-Typeにcharsetを指定→結果に影響なし総合して以下のように書きました。なんでなんだろう......。00:56:15回答に書き忘れましたが、SJIS指定して出力されたファイルのエンコーディングは何になっているのでしょうか?EUCのままなのか、何故だか、UTF-8になっているとか、あるいは、全く解読できないデータになっているとかが分かると、何か解決のとっかかりになるかもしれません。01:26:57うーん、ファイルのエンコーディングって、どうやって確認するんでしょう?とりあえず、テキストエディタで開いた際に、EUC-JPで書き出した場合はエディタで文字コードをEUC-JPに指定してやれば日本語がちゃんと見えるのですが、SJISで書き出した場合はエディタでどの文字コードにしても化けっぱなし、という状態です。実際のところ、SJISにしたいと言うよりは、「書き出したCSVファイルをダブルクリックしてそのままエクセルで立ち上げた際に、日本語が文字化けせずに閲覧できること」を目的としています。EUC-JPの文字コードで書き出されたCSVファイルは、エクセルでそのまま開くと、(たぶんエクセル側がSJISをデフォルトとしているのか)文字化けしてしまうんですよね。02:46:53複数の文字コードに対応したテキストエディタで開いてみてください。秀丸やEmacsなどです。あとは、ブラウザで開くというのも簡単かもしれません。ブラウザでの確認方法は、こんな感じです。1.hoge.csvとして出力したファイルを、hoge.htmlなどとリネームして、ブラウザで開いてください。2.うまくブラウザのエンコーディングの認識が機能すれば、その文字列が表示されると思います。3.IEであれば、表示->エンコードのところで、どのエンコーディングにチェックが入っているかを確認してください。4.もし、ブラウザで文字化けしていたら、表示->エンコードのところで、正しく表示されるものを探してください。Shift_JIS、EUC、UTF-8程度を試せば十分だと思います。あとは、自動変換の確認ですが、サーバの設定を見れないとのことなのですが、こんな風に試してみてください。以下のようなtest.phpプログラムをShift_JISで保存して、サーバ上に配置して、アクセスしてみてください。上記、エンコーディングの確認と同様にShift_JISとしてうまく表示されれば、サーバ側での自動変換はないかと思います。逆に、EUCなどで正しくみえれば、自動変換されていることの確証がえられます。"テスト";?>確証が得られたところで、何かの言い訳や、クライアントさんへのお願い程度にしかならないのかもしれませんが、もやもやしているよりははっきりした方がよいと思いますので。03:06:54ああ、いえ、秀丸で確認してます。SJISで書き出したやつは、文字コードを何にしても文字化けしっぱなし。ブラウザで見ても同じです。何か別の文字コードで書き出されてる(=どれかの文字コードなら見られる)と言うよりは、もう、全然正常には見られないって感じですね。自動変換のほう、確認してみました。うーん?Shift_JISでちゃんと出ますね。自動変換っていう訳ではないってことでしょうか。分かんないので、とりあえず明日、サーバ管理者に質問してみます。社内のテストサーバ上で、クライアントの実装サーバ上ではないので......。休日だったので、確認のしようがなく、はてなに質問を投げたのですが、もしも解決したら結果もこちらでご報告します。一応質問はまだ開けておくので、何か解決策のある方がいらっしゃったら引き続きお願いします。03:48:21症状からすると、自動変換ではないようですね。EUCではうまくいくというのが、すっきりしないですね。mb_convert_variables()が失敗して、データを壊しているとしか思えないというか・・・。ちなみにですが、mb_convert_variablesは成功すると、恐らくEUCという文字列を返すと思いますが、正しく返していますか?もし、ASCIIなんかを返しているようであれば、autoのところを明示的にEUCを指定してみてください。あとは、header()での出力をやめて、ブラウザ上にcsvデータを表示させた際はどうなりますか?ちなみにくどいようですが、header()より先に中身を出力して、ファイルとしてダウンロードできるのが不思議です。15:58:01mb_detect_encodingの結果から疑ってみては?あとautoも信用できないのできちんと指定した方がいいです。mb_convert_encoding("Shift_JIS","EUC-JP",$prtString);どれが何の文字コードになっているのか整理しないと環境が変わるごとに挙動が変わってキリがないと思います。23:29:23t_shionoさん、KeyKeyさん、コメントありがとうございます。手掛かりを提示していただいて感謝ですが、それとは別に、解決を得ましたのでご報告いたします。filename=download.csv");mb_convert_variables("SJIS","EUC-JP",$prtString);mb_http_output('pass');print($prtString);と言うことで、mb_http_output('pass');を挿入することでSJIS書き出しを成功しました。結局、最終的に出力される文字コードをEUC-JPに設定している箇所が別にあったため、mb_http_output('pass');することでSJIS指定のエンコードをそのまま行うように明示的に宣言する必要があったみたいです。10:36:17NP後払いで注文詳細を登録する際に「csv」で登録できますが、EC-CUBEには...「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。これ以上回答リクエストを送信することはできません。はてなココの「ともだち」を表示します。回答リクエストを送信したユーザーはいませんすでに登録されている方はこちらからログインツイートするウォッチリスト1人が登録していますこの質問に含まれるキーワードEUC190SJIS210PHP7643CSV998文字コード565JIS258EUC-JP179文字列2070関連質問staff14PHPでファイルをダウンロードさせる処理について質問です。