• ベストアンサー

フォームから'味'送信

フォームから'味'という漢字を送信するとなぜか'?'と表示するんです。 でも、'味見'とか2文字以上だときちんと'味見'になります。 PHP(4.4.4)もMYSQL(4.0.17)もEUCJPで統一してあります。 ちなみに'味'ではなくて他の文字なら1文字でもキチンと表示します。 hoge.php ECHO $_POST['hoge_hoge']; ECHO "<FORM action=hoge.php method=POST>\n"; ECHO "<INPUT TYPE=text NAME=hoge_hoge value='味'>\n"; ECHO "<input type=submit value='検索'>\n"; どなたか原因と対処法をご存知ないでしょうか?

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.4

mbstring.detect_order = "auto" の時は、 "ASCII, JIS, UTF-8, EUC-JP, SJIS"に展開されます よって、EUC-JPと判定する前にJISに判定されているのでは?文字数が少ないとよく起こるようですよ。 この場合は、順番を変えて、EUC-JPを先に持ってくるようにします。

calltella
質問者

お礼

試してみた所できました、ありがとうございます。

その他の回答 (3)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

> 今のところ、文字化けするのは'味'だけなんです。 試されたのは、どういった範囲ですか? すべての文字について確認なさったわけではないですよね? 今はたまたま表面化していないだけで、試していない文字の中に、 「味」と同じように文字化けしてしまう文字を含んでいるのではないかと心配です。 そういう問題を内在していないかどうかを確認するために、 文字コードに関する今の設定がどうなっているかをお聞きしておりました。

calltella
質問者

補足

補足が不十分で申し訳ありませんでした。 現在の設定はこうなっております。 -- php.ini設定 -- default_charset = "EUC-JP" [mbstring] mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; -- my.ini設定(MYSQL) -- [mysqld] default-character-set=ujis しかしながら上記に記したhoge.phpでも同様ですので MYSQLから取ってきたデータでなくても再現します。 よろしくおねがいします。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

> PHP(4.4.4)もMYSQL(4.0.17)もEUCJPで統一してあります。 EUC-JPで統一している、というのは、どこの設定を どのように行なっているので統一している、 ということなのでしょうか。 PHPのマルチバイトストリング関連の設定、 PHPスクリプトのコード体系、 MySQLのコード体系の設定、 このあたりがうまくマッチしていないと、文字化けなどの 不都合が発生します。

calltella
質問者

補足

回答をいただきありがとうございます。 '味'以外にも文字化けするのならおっしゃる事もわかるのですが 今のところ、文字化けするのは'味'だけなんです。

  • hito-koto
  • ベストアンサー率53% (14/26)
回答No.1

もとの漢字コードを自動判定にしていませんか? 「味」のEUCコードは、EUCにもS-JISにも存在するコードなので、自動判定ならば誤って変換してしまっているのかも知れません。

calltella
質問者

補足

回答をいただきありがとうございます。 '味'が特殊な文字コードを持つのはわかりました。 >もとの漢字コードを自動判定にしていませんか? 'もとの'と言うのはphp.iniの設定の事でしょうか? php.iniを変更したら'味'以外の文字も文字コードを指定なければいけないのでしょうか? PHPプログラミングで解決できる方法はあるんでしょうか?