- 締切済み
PHP 入力値 文字化け
phpでFormで入力した値(日本語)が文字化けしてしまいます。 環境は WinXp pro apache2.0.59 php 4.4.7 php.iniのおもな設定ですが、 mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; ブラウザからすべてShiftJisで入力されているのですが、 それがうまく EUC-JPに内部エンコードされていません。 mb_convert_encording($str,"EUC-JP","auto")をスクリプト内で 記述するとうまく表示されますが、なんとか設定で文字化けしないよう にできないでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
エンコードできていると思います。 なぜなら、EUCJPにエンコードするように書いているからです。 もし、DB上で見れないのであれば、DBの設定がうまくいっていないのではないでしょうか?私の場合は、UTF-8で管理しているのですが、 (phpmyadminが作成した)sql文 ALTER TABLE `テーブル名` CHANGE `フィールド名` `フィールド名` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL で文字列の設定を変えたところ、見えるようになりました。 一度、mySQLのフィールドの文字列の設定を見直してみては如何でしょうか?
- tany180sx
- ベストアンサー率63% (239/379)
回答ではないですが.. 私が確認することは ・phpinfoで設定は反映されていますか? ・設定変更はphp.iniですか?htaccess?ini_set? ・フォームはmultipart/form-dataですか? ・文字化けの原因は誤変換ですか?無変換ですか?
- tany180sx
- ベストアンサー率63% (239/379)
inputをSJISで決め打ちするか detect_orderでSJISを優先してはどうでしょう。 私はtranslationをOffにして 自前でエンコーディングする方が好みですが。
お礼
ご回答ありがとうございます。 >inputをSJISで決め打ちするか >detect_orderでSJISを優先してはどうでしょう。 どちらも試したのですが、だめでした。 >自前でエンコーディングする方が好みですが。 テスト環境用にLinux→Windowsに移行して開発環境を構築 してるのですが、Linuxではうまくうごいています。 そのためできる限り、スクリプトないでのエンコードは避けたいのです。 修正箇所がおおすぎまして・・・。
お礼
>phpinfoで設定は反映されていますか? phpinfoで設定は反映されています。 >設定変更はphp.iniですか?htaccess?ini_set? php.iniです。 >フォームはmultipart/form-dataですか? 違います。 >文字化けの原因は誤変換ですか?無変換ですか? おそらく無変換だとおもいます。 ブラウザからの入力がShiftJisでそれを内部エンコードEUC-JPにて そのまま扱おうとして、文字化けしているようです。 mbstring.encoding_translation = On mbstring.internal_encoding = EUC-JP がブラウザからの入力だけきいていないようにおもうのですが、 どうでしょうか?