• 締切済み

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

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

  • PHP
  • 回答数4
  • ありがとう数0

みんなの回答

  • 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

  • 特殊な文字エンコーディングで困っています。

    特殊な文字エンコーディングで困っています。 エンコーディング名を教えて下さい。 コミック 上の文字列で「コミック」です。 ゲーム 「ゲーム」です。 アンパサンドとシャープから始まるこのエンコーディング名を教えてください。 phpでUTF-8に変換したいと思っています。 mb_convert_encoding で総当りで変換してみたのですが、UTF-8になりませんでした。 もし知っている方がいらっしゃいましたら、教えてください。

    • ベストアンサー
    • PHP
  • PHPのメールフォーム文字化けについて

    PHP超初心者です。 前任者が退職し、急きょWEBを引き継ぐことになりました。 現在稼動中のサイトのメールフォームは、PHPで処理を行っているのですが、 フォーム入力後に表示する入力確認画面及び送信メールで、 日本語が文字化けを起こしてしまいます。 PHP内に記述されているのは、 if(phpversion() < "4.1.0"){ $_GET = $HTTP_GET_VARS; $_POST = $HTTP_POST_VARS; $_SESSION = $HTTP_SESSION_VARS; } なのですが、レンタルサーバーのPHPバージョンは5.2.8です。 言語及び内部エンコーディングは、 mb_language('Japanese'); mb_internal_encoding(UTF-8); と設定してありますので、文字化けはバージョンの違いによるものではないかと考えているのですが、なにぶん初心者でどのように修正をかければよいのか分かりません。 尚、動作には問題はありません。 初歩的な質問で大変恐縮ですが、どなたかご回答よろしくお願いいたします。 (初心者向けの分かりやすい回答でお願いします)

    • 締切済み
    • PHP
  • phpのmb_convert_encodingで文字化け

    phpのmb_convert_encodingで文字化け phpでmb_convert_encodingを使用してSJISよりUTF-8にエンコーディングしています。 ところが、“(”や“?”などが1文字目に存在すると文字化けしてしまいます。 どのような原因が考えられますでしょうか? お願いいたします。

    • ベストアンサー
    • PHP
  • GEEKLOG(ギークログ) 文字化け

    http://furutani.webstairs.jp/labo/ 上部のようになってしまします。 (データベース日本語が全て?になります) UTF-8でエンコードしています。(全てのファイル確認いたしました) PHPもmysqlもバージョン5だと思います。 htaccessでエンコード指定もしました。 どうしたら、文字化けがなおるのかお教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • MySQL4.0 UTF-8 での文字化け

    こんにちは MySQL4.0 & PHP4.3 でHTMLは文字コードUTF-8で記述しています。 MySQL4.0の文字コード設定はレンタルサーバーのため不明ですが、 phpMyAdminで、utf-8にてデータを入力しました。 select文でMySQLのデータを拾ってくると文字化けはおきないのですが PHP経由でPOSTされた値を使ってinsertやupdateをかけると文字化けしてしまいます。phpMyAdmin上でも文字化けしていますが、phpMyAdminをEUC-JPにすると、入力した文字が文字化けせずに表示されます。 (が、すでに入っているデータは文字化けします、、、、) 入力画面は metaでUTF-8宣言をしており、ブラウザ(IE)上でエンコードを確認するとUnicode(UTF-8)になっています。4.1みたいにset names を指定するとうまくいくかな?と思ったのですが、やっぱり4.0なので結果は変わらず、でした。PHPのスクリプトそのものは、UTF-8で記述しているのですが、、、、 どういった項目をみなおせばいいのでしょうか?

    • ベストアンサー
    • MySQL
  • mysqlの文字化けについて

    さくらサーバーのプレミアムプランで、MYSQLが文字化けを起こして困っています。 MYSQL5.1、データベースの文字コードはUTF8です。 UTF8でエンコードされたPHPプログラムからデータをINSERTすると文字化けを起こします。 ハッスルサーバーで同じ環境を再現すると、文字化けは起こしません。 違いは、ハッスルサーバーでは、「character_set_server utf8」になっているのに対して、 さくらサーバーでは、「character_set_server ujis 」となっています。 この、ujisをutf8に変更すれば解決しそうに思うのですが、変更の仕方がわかりません。 アドバイス頂けましたら、幸いです。

  • 文字化けに関して

    文字化けが起きてしまって困っています。 PHPとMysqlを使用した、CMSを今あるサーバから別のサーバに移したいのですが、 新しいサーバに移すと文字化けをしてしまいます。 正確にはデータベースから読み込んでいる部分だけが文字化けしています。 index.phpにHTMLコードとして記述してある部分は文字化けしていません。 ブラウザ(IE)の「表示→エンコード」からUTF8を選ぶと逆に データベースの部分が正確に表示され、HTMLに直接書き込んだ部分が文字化けします。 現状でわかる範囲で書きます。 ・index.phpのmetaは <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> ・MYSQL(phpmyadminに書かれている)文字セットは UTF-8 Unicode (utf8) ・php.iniの設定 mbstring.language・・・japanese mbstring.internal_encoding・・・UTF-8 mbstring.encoding_translation・・・on mbstring.http_input・・・未設定 mbstring.http_output・・・未設定 default_charset・・・未設定 output_handler・・・未設定 output_buffering・・・未設定 magic_quotes_gpc・・・Off 詳しい方よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【文字コード】UTF-8だとDreamWeaver→terapadコピペで文字化け

    ドリームウィーバー8(Win-XP)使用者です。 PHPを作成しているため、テキストエディターの文字コードをUTF-8に統一しています。(クライアント都合) しかしながら DreamWeaver→terapad で文字をコピペすると文字化けを起こします。どちらもUTF-8にしているのに… 一体どうすれば回避できるのでしょうか? *terapadのかわりに秀丸にペーストするなら文字化けはおきません。(terapadが好きなので極力terapadを使いたい) *DreamWeaverについては、「Ctrl」+「J」→「タイトル/エンコーディング」→「エンコーディング=UTF-8」の設定です お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • 一部の文字のみ文字化けします

    phpでXMLを生成しています。 XMLをエディターで見るとほとんどの文字は正常に表示されているのですが、一部の文字だけが文字化けしています。 具体的には 究、岩、ど の三つの文字だけです。 その三つの文字はいずれも同じ文字に文字化けしています。 cを丸で囲ったコピーライトの表記に使われる文字に似ています。 上記の文字のみなにかコピーライトに引っかかっているのでしょうか。 googleで色々と調べてみましたが、他の文字での文字化けの事例はあるのですが、上記の文字での事例は見つかりませんでした。 どなたかご教示願えませんでしょうか。 phpのバージョンはPHP Version 5.3.3です。 phpのあるディレクトリと同じディレクトリにhtaccessで以下の記述を入れています。 php_value mbstring.internal_encoding UTF-8 php_value default_charset UTF-8 php_value mbstring.http_output UTF-8 php_value mbstring.language UTF-8 php_value mbstring.http_input auto php_flag mbstring.encoding_translation On php_value output_handler mb_output_handler

    • ベストアンサー
    • PHP
  • PHPでセッション導入後に初めて見る文字化け

    PHPの文字化けについて質問させてください。 約5年間程動かしているプログラムで、今まで全く文字化けしていなかったのが、突然文字化けが始まりました。セッション関数を入れてから、起こり始めたため、恐らく原因はセッションだと思います。 プログラムコードはSJISで記載し、日本語文字が文字化けしたりしなかったりと不定期に文字化けします。その形式も今まで私は見かけたことが無い形式で、SJIS特有の文字化けではないようで、例えばですが、 ^uoCLO5Zbg u[IuVfBA u[S[hXg[ J[lA sXY u[IuVfBA のように日本語が全て何かのコードのようになっています。 HTMLフォームに入力して渡してきた変数部分が文字化けしており、PHPに直接記載している日本語は文字化けしていないようです。 毎回文字化けはせず、突然文字化けします。 PHPのバージョンは4.3.9です。 以上情報が少ないかもしれませんが、もし何か原因や解決のヒントが分かりましたら、ご教授いただければ幸いです。

    • ベストアンサー
    • PHP