• ベストアンサー

フォーム受け渡しの際の文字化け

phpスクリプトで フォーム入力→確認画面→ログファイルに書き込み→別スクリプトによりログファイル読み込み→表示 というスクリプトを作ったのですが、フォームに本文を入力した際に 確認画面で本文を見ると、文字化けしてしまいます。 例えば、芸能界と書けば芸柏lになってしまうなど、何故かある一定の文字が書き込めません。(他の大半の文字は文字化けしない) おそらく、euc-jpではなくSJISでphpスクリプトを作っているためだと思うのですが、どうしてもSJISで書きたい場合、何か解決方法はありますか? また、表示するときにSJISになっていればいいため、入力段階などではeuc-jpでも大丈夫です。 ご教授お願いします。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

さらに追記です(汗 現象だけ見ると、magic_quotes_gpcがoff(\が挿入されない)環境なのに、stripslashesを通してしまっていて、日本語の中の「\」が消されてしまっているように思えます。 このあたりは実際のコードを読まないと何とも言えませんが、ANo.2で書いたようにget_magic_quote_gpc()でon/offを判断して両方に対応させれば問題はありません。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

#ANo.2です。あわてて書いたらtypoが・・ >  mb_internal_language('euc-jp');   mb_internal_encoding('euc-jp'); ですね(大汗

すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

「能」などが化けるとしたら「5c問題」ですね。   http://www.shtml.jp/mojibake/sjis_cgi.html#php また、magic_quotes_gpcがONであればフォームから受け取ったデータはstripslashesを通さないといけません(これはSJISでなくてもです:asciiのみでも起こりうる)。   http://www.php.net/manual/ja/function.get-magic-quotes-gpc.php 基本的にSJIS以外の文字コードで書きましょう(EUC-JPやUTF-8)   mb_language('ja');   mb_internal_language('euc-jp');   mb_http_output('SJIS');   ob_start('mb_output_handler'); としておいて   foreach ($_POST as $key->$value) {     if (get_magic_quotes_gpc) { $value = stripslashes($value); }     $_POST[$key] = mb_convert_encoding($value, 'EUC-JP', 'SJIS')     } でフォーム入力は変換します(出力はoutput_handlerの変換にまかせる)。

gakumon
質問者

お礼

ありがとうございます。確かに、shimixさんの言うとおり行えば 文字化けを直すことができました。 まだまだわからないことがたくさんあり、スクリプトも稚拙なものしか作れませんが、徐々に勉強していこうとおもいます。 今回はわかりやすく、理解しやすい回答をありがとうございました。

すると、全ての回答が全文表示されます。
  • LACOMS
  • ベストアンサー率65% (15/23)
回答No.1

ホームページ表示の文字コードを指定されてますか? HTMLでは、 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/> PHPでは、 header("Content-Type: text/html;charset=Shift_JIS"); のように書きます。

gakumon
質問者

お礼

ご回答ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A