• 締切済み

セッションが文字化け、エンコーディングを指定する方法とは?

セッションに入った文字が文字化けします。 それを、サーバー側に問い合わせたところ、 「phpの場合は、内部エンコーディングがUTF-8になっているので、明示的指定がなければ文字化けすることはあります。 エンコーディングを指定してください。」 という返答がきました。 エンコーディングとはどのように指定すれば良いのでしょうか? .htaccessかと思ったのですが、使えないみたいです。

みんなの回答

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.4

がるです。 > 入室した時にセッションに入れる前にEUCに変換し、 > ファイルに書き込む時や、ログ行数を出力する時にsjisに変換するということなのでしょうか? 概ねこんな感じかと。 ただ、表示の絡まない「ファイル出力」に関しては「EUCのまま」とするのもアリです。 ようは、そういった「文字コードがどうなっているのか」をきちんと把握しきること(設計すること)が肝要だと思います。

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

まず自動で変換されるかどうかをphpinfoで確認してください。 たぶん自動では変換されないpass設定です。 自動で変換したい場合は.htaccessで設定してください。 (入力自動の例) mbstring.encoding_translation = On mbstring.http_input = auto mbstring.detect_order = auto mbstring.internal_encoding = eucJP (出力自動の例)スクリプト内でも可 mbstring.http_output = SJIS-win output_buffering = On output_handler = mb_output_handler スクリプト内で変換する場合は mb_detect_encoding() mb_convert_encoding() mb_convert_variables() 等の関数を使えば処理できます。 出力は普通mb_output_handlerを使って自動変換すると思いますが。

参考URL:
http://php.s3.to/man/ref.mbstring.html
tacfore
質問者

補足

お返事送れてすみません。 mbstring.encoding_translation On/Off なので、自動変換ではないと思います。 .htaccessのようにしてみたのですが、サーバーエラー500で 表示されなくなってしまいました。 エンコーディングがシフトJISなので、それで指定すれいばいいのかな?と思ったのですが、 指定できるのはMaster Value ではなく、Local Value なんですよね。

noname#21776
noname#21776
回答No.2

 私は、macなのですが... 一番上のメニューバーに ” 表示 ”   が、あり、その表示の一番下に ” テキストエンコーディング ” から、選択出来ます。

tacfore
質問者

補足

ご回答有難う御座います。 それはDreamweaverのソフトでしょうか? 少し探してみます。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 暗黙的自動的な変換を期待するよりは、ご自身で明示的にエンコードタイプをそろえたほうがよろしいかと思います。 使うべき関数は mb_convert_encoding http://www.php.net/manual/ja/function.mb-convert-encoding.php で、タイミングとしては「データを取得した直後」にまず一回。必要に応じて「出力タイミングでもう一回」になります。 具体的には「データ取得時にEUCに変換」「出力タイミングでsjisに変換」というのが割合にパターンでしょうか? なにか追加の質問などありましたらお気軽におっしゃってください。

tacfore
質問者

補足

早速のご回答有難う御座います。 現在、チャットサイトを運営しているのですが、 入室した時の名前やログ行数、名前の色などをセッションで保持しています。 発言のときに、ファイルに名前や名前の色などが書き込まれるようにしています。 入室した時にセッションに入れる前にEUCに変換し、 ファイルに書き込む時や、ログ行数を出力する時にsjisに変換するということなのでしょうか?

関連するQ&A