- ベストアンサー
postやgetで得られたパラメタのエンコードを変換したい
Phpの内部エンコードとhtmlの表示文字コードが異なる場合、 そのformから送られる変数をphpで受けた場合、当然文字化けしてしまいます。 これを回避したいので、 $_POST や $_GET の文字列のエンコードを変換したいのですが(変数名の予想はできない) 受ける変数の文字コードを指定する方法が分かりません。 ご存知の方はご教授お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>できれば$_POST自体の文字コードを変更したいのです php.ini に自動変換指定があったけど php4.3以降で mbstring.encoding_translation を on のときのみ、HTTP入力文字エンコーディングは、自動的に mbstring.internal_encodingに変換されます。とのこと。 しかし、mb_convert_encoding()も同じだけど、文字列が短いと誤変換の確率が高くなります。 で、この自動変換を行ってしまうと、誤変換後のデータしか得られないので、 誤変換対策(同時に送られてきた他の文字列と連結して変換するとか、他のデータに文字エンコーディング指定を含めてそれを参考に元文字エンコーディングを指定するとか)が取りにくくなってしまいます。 mbstring.http_input の文字エンコーディングが限定できるならば、自動変換もかなり有効かとも思いますけど、誤変換の可能性は十分考慮して使ってください。
その他の回答 (2)
- hegemonism
- ベストアンサー率53% (37/69)
(-ω-;)ウーン・・・そうなると、HTMLの文字コードをPHP内部エンコーディングに合わせるしか思いつかないです。 お役に立てず申し訳ないm(_ _"m)ペコリ
- hegemonism
- ベストアンサー率53% (37/69)
mb_convert_encoding()でエンコード変換するだけなのですが。それではだめなのでしょうか? 例: $str=mb_convert_encoding($_POST['name'],"SJIS");
お礼
うーん... > $str=mb_convert_encoding($_POST['name'],"SJIS"); のnameの部分が何が来るか分からないのですよ 配列の数だけループすればいいのかもしれませんが、 できれば$_POST自体の文字コードを変更したいのです... 詳しく言えば、汎用CMSのをいじってるのですが、 プログラム(或いは追加モジュール)のどこでどのように$_POSTや$_GETが参照されるか分からないので $_POSTや$_GET自体の文字コードを変換する必要があります。
お礼
.htaccessの設定... php_flag mbstring.encoding_translation On にかなり手こずりましたが、 ご指摘の方法で解決いたしました。 ありがとうございます