- 締切済み
文字化けについて
現在PHPでの開発をおこなっています。 環境はWindows2000、Webサーバー『APACHE』、PHP『php-4.2.0-Win32』を使用しております。 Mysqlも接続でき、Web上でも表示ができるようになったのですが、文字化けを起こしてしまいます。以前カタカナの『ソ』が文字化けを起してしまったので、その時は『php.ini』ファイルの ・output_bufferring = Off ・default_charset = EUC-JP ・mbstring.http_input = auto ・mbstring.http_output = EUC_JP ・mbstring.internal_encoding = EUC_JP ・mbstring.substitute_character = none ・register_globals = On と7箇所設定を変えました。自分で作成したソースもEUCで保存してるんですけど、 文字化けが起こってしまいます。 どうしたらよろしいでしょうか? お分かりになる方がおられましたらよろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kusukusu
- ベストアンサー率38% (141/363)
今回の場合はおそらく「DBへの登録がsjisだった」と言う落ちではないかと想像できますが、その辺りどうでしょう? もし違うのであれば、非常に興味があるので、ぜひご回答をお願いしたいと思います。 No.2の方の回答は、確かにそれでもいいと思いますが、もしDBの方をEUC-JPで管理してよいのであれば、MySQL側のencodingでの対応をお勧めします。 そうじゃないと、できあがったコードを後から見るときに嫌になりますよ(笑) また、文字化けを起こしやすいパターンとして、その文字コード表にエスケープシークエンス(バックスラッシュ)等を含む場合が多いです。 その辺りを頭に入れておけば、こういうパターンは結構対応できます。 ようは慣れです。
- AeroWriter
- ベストアンサー率100% (1/1)
表示したい文字が入った変数$strに対して、 $str = mb_convert_encoding($str, "EUC-JP"); のような操作を行えばよいと思います。 ただし、コンフィグのオプションで --enable-mbstring --enable-mbstr-enc-trans を指定する必要があります。 詳しくは、PHPマニュアルを見てみてください
お礼
解答ありがとうございました。 色々と試した結果、文字化けも起こらず、うまく動くようになりました。
- kusukusu
- ベストアンサー率38% (141/363)
「ソ」の文字化けは有名ですね。 ちょっと検索すればすぐに出てきます。 結論から先に言うと、sjisのままだからです。
補足
私が行なったのは、今までphp.iniファイルは下記のように書いていたのですが、 ・output_bufferring = Off ・default_charset = EUC-JP ・mbstring.http_input = auto ・mbstring.http_output = EUC_JP ・mbstring.internal_encoding = EUC_JP ・mbstring.substitute_character = none ・register_globals = On 2箇所を下記のように変更しました。 ・default_charset = shift_jis ・mbstring.http_output = shift_jis そして、ソースのHEAD部分に <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> を記入する事により、文字化けは解消されました。