こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

php.iniのエンコーディングの設定について

現在、FedoraCore6、Apache2、PHP5、MySQLの環境で勉強をしているのですが、
それぞれに文字コードの設定がありますが、色々調べてみたものの、
どうもスッキリせずに分からない部分があります。


php.ini

(1)mbstring.internal_encoding:
PHPファイル作成するのに使用する文字コードを指定

(2)mbstring.http_input:HTMLファイルから呼び出されるとき、そのHTMLファイルと同じ文字コードを指定(html→phpへデータの受け渡し)

(3)mbstring.http_output:PHPからHTMLファイルに出力する時にエンコードする文字コード(php→htmlへデータの受け渡し時にエンコーディングする文字コード)



httpd.conf

(4)AddDefaultCharset:Httpヘッダにつける文字コードの指定



my.cnf

(5)default-character-set:MySQL内のデータの文字コード


ここで、例えば、

HTMLファイルのフォームから入力したキーを元に、
PHPでmysqlの関数を使ってmysqlからデータを取得、HTMLへと出力するとした場合。

この(1)~(5)の文字コードの設定はどうかかわってくるのでしょうか??

また(3)と(4)の違いは、

(3)はhttpヘッダに文字コード指定をつけるだけに対して、
(4)は実際にエンコードしてhttpヘッダに文字コード指定をつけるのでしょうか?

(3)と(4)の違いとは?

よろしくお願いいたします。

投稿日時 - 2007-01-15 19:54:47

QNo.2668564

困ってます

質問者が選んだベストアンサー

>HTMLファイルのフォームから入力したキーを元に、
→ HTMLの文字コードでencodeして送信されてくるので、 mbstring.http_inputの設定に基づいて判定を行う。
しかしブラウザによっては、Shift-JISのページなのに、送信encodeはunicodeって事もあるようなので、mbstring.http_input=auto で判定させることが多い。
判定が付いたら、mbstring.internal_encodingに設定された文字コード系へ変換する。

>PHPでmysqlの関数を使ってmysqlからデータを取得、
mysqlのデータ内文字コードは、mbstring.internal_encodingに合わせるのがよい
異なっていると、文字化けする(異なっていることがあらかじめ解っているなら、データを得た時点で文字コード変換を掛ければいいのではあるけど)

>HTMLへと出力するとした場合。
mbstring.http_outputに応じて自動変換するが、mbstring.internal_encodingと異なるコード系を指定した場合はbufferingを有効にしないといけない

>(4)AddDefaultCharset:Httpヘッダにつける文字コードの指定
apacheサーバーの動作はよく知らないけど、AddDefaultCharsetを指定すると、htmlやphpまたはperlなどからのテキスト出力のヘッダーにはCharset指定が付加されるということかな?
phpの場合には、サーバー側では指定しない方がいいように思う。phpの方でmbstring.http_outputに応じたヘッダーが付加されるから。さらによけいなヘッダーが付くのは文字化けの元。

投稿日時 - 2007-01-15 22:43:58

お礼

ありがとうございました、スッキリしました!どうもこの文字コードらへんがとっつきにくくて困っていたところで、非常に助かりました!どの資料を見てもスッキリしなかったのに、hrm_mmmさんの非常に分かりやすい説明に感激です!本当にありがとうございました!

投稿日時 - 2007-01-16 01:10:39

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問