dポイントプレゼントキャンペーン実施中!

phpスクリプトで

フォーム入力→確認画面→ログファイルに書き込み→別スクリプトによりログファイル読み込み→表示

というスクリプトを作ったのですが、フォームに本文を入力した際に
確認画面で本文を見ると、文字化けしてしまいます。

例えば、芸能界と書けば芸柏lになってしまうなど、何故かある一定の文字が書き込めません。(他の大半の文字は文字化けしない)

おそらく、euc-jpではなくSJISでphpスクリプトを作っているためだと思うのですが、どうしてもSJISで書きたい場合、何か解決方法はありますか?

また、表示するときにSJISになっていればいいため、入力段階などではeuc-jpでも大丈夫です。

ご教授お願いします。

A 回答 (4件)

さらに追記です(汗



現象だけ見ると、magic_quotes_gpcがoff(\が挿入されない)環境なのに、stripslashesを通してしまっていて、日本語の中の「\」が消されてしまっているように思えます。

このあたりは実際のコードを読まないと何とも言えませんが、ANo.2で書いたようにget_magic_quote_gpc()でon/offを判断して両方に対応させれば問題はありません。
    • good
    • 0

#ANo.2です。

あわてて書いたらtypoが・・

>  mb_internal_language('euc-jp');

  mb_internal_encoding('euc-jp');

ですね(大汗
    • good
    • 0

「能」などが化けるとしたら「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- …

基本的に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の変換にまかせる)。
    • good
    • 0
この回答へのお礼

ありがとうございます。確かに、shimixさんの言うとおり行えば
文字化けを直すことができました。

まだまだわからないことがたくさんあり、スクリプトも稚拙なものしか作れませんが、徐々に勉強していこうとおもいます。

今回はわかりやすく、理解しやすい回答をありがとうございました。

お礼日時:2008/02/29 14:38

ホームページ表示の文字コードを指定されてますか?


HTMLでは、
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/>

PHPでは、
header("Content-Type: text/html;charset=Shift_JIS");

のように書きます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/29 14:35

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