PHPで、日本語をmb_convert_encoding
を使って文字コード変換してるのですが、
なぜか文字化けしてしまい、原因が分からず困っています。
今、UTF-8からSJIS-winへの変換をおこなっていますが、文字化けしてしまいます。
具体的には下記のようなコードを使っています。
lang
1$str = "ほげ"; 2$str = mb_convert_encoding($str, "SJIS-win", "UTF-8"); 3 4echo $str; 5
このようにしても、"ほげ"は表示されず、ひし型の「?」のような文字列で文字化けしています。
元の"ほげ"ってのがUTF-8じゃないのか?とおもって、mb_detect_encoding($str)
をしてみましたが、これは正しく"UTF-8"と表示されました。
完全に原因が分からず困ってます。。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答6件
0
ブラウザのエンコーディングが「自動検出」になっていれば
header("Content-type: text/html charset=Shift_JIS");
だけで大抵はいけるようですが、Chromeさんは頑固みたいです。(wibkit的な話ならSafariもかな…?)
<?php $str = "ほげ"; $str = mb_convert_encoding($str, "SJIS-win", "UTF-8"); header("Content-type: text/html charset=Shift_JIS"); echo "<html><head><meta charset='Shift_JIS'></head><body>"; echo $str; echo "</body></html>";
ここまではっきり書いてもダメなら別の問題ですね。
ちなみに、SJIS-winって、Windows-31JのPHPでのエイリアスなので、
header("Content-type: text/html; charset=SJIS-win");
これはダメなんじゃないかな…
投稿2015/04/13 08:43
編集2015/04/13 09:29
退会済みユーザー
総合スコア0
0
webサーバで実行してるんですよね。
mb_detect_encoding($str)がUTF-8になるということなので、phpファイルのエンコーディングもUTF-8と推察されます。
そこでSJISの文字をechoしてるから文字化けするんじゃないでしょうか。
具体的な検証としては
lang
1$str = "ほげ"; 2$str = mb_convert_encoding($str, "SJIS-win", "UTF-8"); 3 4file_put_contents("hoge.txt", $str);
生成されるhoge.txtの中身を見てみてください。
投稿2015/04/14 23:33
総合スコア55
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
PHPはデフォルトの環境で運用しているならば、ソースコード中で明示して出力しない限り、レスポンスヘッダーのContent-Typeにデフォルトで文字コードをUTF-8で出力します。
もし、SJISでテキストを出力したいのであれば、以下のコードを全ての出力に先だって配置して、出力してみてください。 レスポンスヘッダーのContent-Typeの文字コードにSJISを指定する記述となります。
lang
1header("Content-type: text/html; charset=SJIS-win");
投稿2015/04/13 04:15
編集2015/04/13 04:18総合スコア53
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/13 06:32
2015/04/13 06:33
2015/04/13 08:37

0
CLIで実行していますか? Webサーバから実行していますか?
internal_encodingとファイルのエンコーディングは合っていますか?
投稿2015/04/13 04:14
総合スコア973
0
mb_convert_encording($str,"SJIS-win", "ASCII,JIS,UTF-8,EUC-JP,SJIS");
と書いてやればできたと思います。
後ろがAUTOだと問題があったりしがちのはずです。
投稿2015/04/13 02:49
総合スコア12
0
mb_detect_encodingがutf8ならソースファイルの文字コードはutf8なんでしょうから、実行環境のコマンドプロンプト等のCLI環境の文字コードに問題があるのでは?
http://www.adminweb.jp/command/display/index5.html
投稿2015/04/13 02:09
総合スコア9
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/04/13 08:45