プロが教えるわが家の防犯対策術!

Phpの内部エンコードとhtmlの表示文字コードが異なる場合、
そのformから送られる変数をphpで受けた場合、当然文字化けしてしまいます。

これを回避したいので、
$_POST や $_GET の文字列のエンコードを変換したいのですが(変数名の予想はできない)
受ける変数の文字コードを指定する方法が分かりません。

ご存知の方はご教授お願いいたします。

A 回答 (3件)

>できれば$_POST自体の文字コードを変更したいのです



php.ini に自動変換指定があったけど
php4.3以降で mbstring.encoding_translation を on のときのみ、HTTP入力文字エンコーディングは、自動的に mbstring.internal_encodingに変換されます。とのこと。

しかし、mb_convert_encoding()も同じだけど、文字列が短いと誤変換の確率が高くなります。
で、この自動変換を行ってしまうと、誤変換後のデータしか得られないので、
誤変換対策(同時に送られてきた他の文字列と連結して変換するとか、他のデータに文字エンコーディング指定を含めてそれを参考に元文字エンコーディングを指定するとか)が取りにくくなってしまいます。

mbstring.http_input の文字エンコーディングが限定できるならば、自動変換もかなり有効かとも思いますけど、誤変換の可能性は十分考慮して使ってください。
    • good
    • 0
この回答へのお礼

.htaccessの設定...
php_flag mbstring.encoding_translation On
にかなり手こずりましたが、
ご指摘の方法で解決いたしました。

ありがとうございます

お礼日時:2006/01/09 02:31

(-ω-;)ウーン・・・そうなると、HTMLの文字コードをPHP内部エンコーディングに合わせるしか思いつかないです。


お役に立てず申し訳ないm(_ _"m)ペコリ
    • good
    • 0

mb_convert_encoding()でエンコード変換するだけなのですが。

それではだめなのでしょうか?
例:
$str=mb_convert_encoding($_POST['name'],"SJIS");
    • good
    • 0
この回答へのお礼

うーん...
> $str=mb_convert_encoding($_POST['name'],"SJIS");
のnameの部分が何が来るか分からないのですよ

配列の数だけループすればいいのかもしれませんが、
できれば$_POST自体の文字コードを変更したいのです...

詳しく言えば、汎用CMSのをいじってるのですが、
プログラム(或いは追加モジュール)のどこでどのように$_POSTや$_GETが参照されるか分からないので
$_POSTや$_GET自体の文字コードを変換する必要があります。

お礼日時:2006/01/07 21:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!