- ベストアンサー
htmlはSJIS PHPはEUC mb_convert関数を使っても文字化けします
htmlは、Shift-JISで作っています。 PHPは、EUCで作っています。 PHPのPOSTで、文字の部分は、 mb_convert_encoding($_POST[abc],"EUC","SJIS")です。 この関数であれば、文字化けしないはずなのですが・・・ フォームに「あいうえお」と入力すると、、「、、、ヲ、ィ、ェ と入力されてしまいます。 PHP.iniを確認したのですが、mb_convert関数は有効になっています。 因みに、会社の上司もxamppを持っており、htmlとPHPファイルだけコピーさせてもらって、確認したのですが、同じ現象が起こります。 会社のPCと、インストールした物も設定もしたものも同じ。 文字に関わるPHP.iniやmy.confなどを、一応上書きさせてもらったのですが、変わりません。 会社のPCと、全く同じ設定なのに、何故、私のファイルだけ‥‥mb_convert関数が使えないのか? 私のhtmlかPHPに、何かがあるのでしょうか? htmlはMETAタグでSJISにしています。 原因不明で、どうしたらいいのかパニックしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
文字コードがShiftJISの文字コードで記述されたHTMLのフォームからPOSTされてきた文字のコードは当然ShiftJISで、 ソレをEUC-JPで記述されているPHPで処理したいのでShiftJISの文字をEUC-JPに変換したんですよね。 mb_convert_encoding($_POST[abc],"EUC","SJIS"); この関数は、第一引数に与えられた文字列を、第三引数の文字コードから第二引数の文字コードに変換するという意味です。 であれば、その文字コードをHTMLに再度表示したいのであれば、EUC-JP⇒ShiftJISに変換しなければなりませんよね。 mb_convert_encoding($_POST[abc], "SJIS", "EUC"); HTMLのmetaタグでのcharsetの指定に関しては、ブラウザに「このHTMLは~という文字コードで記述されています」というのを宣言、通知するだけであって、文字コードの変換を行うわけではありません。
その他の回答 (2)
- mookun2007
- ベストアンサー率59% (28/47)
> mb_convert_encoding($_POST[abc],"EUC","SJIS")です。 これをそのままHTMLに渡したら化けるのは当然です。 > htmlはMETAタグでSJISにしています。 なぜならMETAにShift_JISを指定しているのだから、当然ブラウザはShift_JISで読み込みますよね。 この場合、出力する際は上記でEUCに変換したものをSJISに戻す必要があります。
補足
>これをそのままHTMLに渡したら化けるのは当然です。 他のPCでは、化けないのは何故でしょう? 化けるのが当然であれば、解決すれば済みますが、全員同じmb_convert_encodingなのです。 ですが、他のPCでは化けていません。 同じ条件で、私のファイルだけ化けるのが、納得いきません。 私のファイルをコピーしても同じなのです。 何か、もしかしたら──というのは、ありますか? > htmlはMETAタグでSJISにしています。 なぜならMETAにShift_JISを指定しているのだから、当然ブラウザはShift_JISで読み込みますよね。 この場合、出力する際は上記でEUCに変換したものをSJISに戻す必要があります。 SJISに戻す方法は、どうするのでしょう? PHPにコードを追加するのでしょうか? #1様の方法とは、異なりますか? 戻す方法も、いくつかコードの書き方が存在らしいですが、広く使われている方法で進めたいと思いますので、お教えていただけると嬉しいです。
- yambejp
- ベストアンサー率51% (3827/7415)
受け取り側のphpのファイルの頭の方にheaderを指定して HTML部分のHEADにMETAを指定してみては? <? header("Content-Type:text/html;charset=euc-jp"); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <body> テスト <? print mb_convert_encoding($_REQUEST["abc"],"EUC","SJIS"); ?> </body> </html>
お礼
PHPのヘッドの部分に指定する方法は、発想が無かったので、今後、使っていきたいと思います。 残念ながら、この方法では直りませんでした。 ありがとうございました。
お礼
なるほど。そういうことだったのですが。 変更したら、直りました。 しかし、今度は、どのフォームからPOSTされてきたのか知るための print "あいうえお : " . mb_convert_encoding~ の「あいうえお」の部分が化けました。 たぶん、これもEUCからSJISに変える必要があるのでしょう。 その辺は、本に書いてないので困ります。 これもmb_convert_encoding?でしょうか。 前途多難のようです。 本やHPを観ながら、もっと勉強しなければなりませんね。