phpで検索時の文字化けに付いて


EUC-JPで作ったフォーム(methodはGETです)があり、
「炭」と入力して「検索」と書いたボタンを押して検索すると文字化けしません。
「?q=%C3%BA&submit=%B8%A1%BA%F7」は文字化けしません。

しかし、リターンキーで検索すると文字化けします。
「?q=%C3%BA&submit=」が文字化けすると言う事です。

また、「?q=%C3%BA&x=%ab」としても文字化けしませんが、
「?q=%C3%BA&x=1」だと文字化けします。

原因として考えられる事や、解決方法を教えてください。

よろしくお願いします。

文字数超過のため
phpの設定等、追加分をコメント欄に書きますので合わせてご覧下さい。

回答の条件
  • 1人1回まで
  • 登録:2008/05/30 10:06:29
  • 終了:2008/06/06 10:10:03

回答(2件)

id:ftns No.1

ftns回答回数153ベストアンサー獲得回数162008/05/30 13:04:57

ポイント35pt

変数名やフィールド名に日本語を使うと文字コード問題を

おこしやすくなりますからHTMLを、

----

<input type=submit name=ok value="検索">

----

とやってみて下さい。

id:worldtravel

ありがとうございます。

こちらは「"」を削除すると言う事でしょうか。


結論としてはリターンキーで検索した場合の文字化けは起さなくなったのですが、

やはり「?q=%C3%BA」とすると文字化けしてしまいます。


また、「変数名やフィールド名に日本語を使うと」とありますが

変数名やフィールド名に日本語は使っていないのですが...

フィールド名というのはname属性の事ですよね!?

  • 追記 ---

やはりダメでした。

文字化けしてしまいます。

よろしくお願いします。

2008/06/05 10:37:34
id:KeyKey No.2

KeyKey回答回数29ベストアンサー獲得回数42008/06/05 17:20:57

ポイント35pt

「mbstring.encoding_translation」がonになっているので

送信時に自動で内部エンコーディングに変換されているはずです。

そして、「mbstring.http_input」が特に指定されていないため

「炭」1文字のような短い値だけでは文字コードが上手く検出できず、

変換に失敗しているのだと思います。

(検索ボタンをクリックした場合は「検索」という文字も送信されるため文字コードの検出に成功する)


「mbstring.encoding_translation」をfalseにしてしまって入力と出力のエンコードを自分でしてしまうのが確実です。

設定を変更できないなら古典的方法ですがhiddenで十分な長さの文字を渡してやれば良いと思います。

id:worldtravel

ありがとうございます。

今朝 hidden で全角スペースを入れる事により解決しました。

無理矢理ですが...


文字化けを起すのはIEだけだったのですが

ブラウザの問題もあるのでしょうか...!?

2008/06/05 17:35:07
  • id:worldtravel
    phpの設定は下記の様になっております。
    (共用サーバです)

    PHP Version 4.4.7

    Directive Local Value Master Value
    mbstring.detect_order auto auto
    mbstring.encoding_translation On On
    mbstring.func_overload 0 0
    mbstring.http_input auto auto
    mbstring.http_output pass pass
    mbstring.internal_encoding EUC-JP EUC-JP
    mbstring.language Japanese Japanese
    mbstring.script_encoding no value no value
    mbstring.substitute_character no value no value

    また、スクリプト内に下記の様に書いても変わりませんでした。
    set_magic_quotes_runtime(false);
    ini_set('mbstring.http_input', 'pass');
    ini_set('mbstring.http_output', 'pass');
    mb_language('ja');
    mb_internal_encoding('EUC-JP');
    mb_regex_encoding('EUC-JP');
  • id:hiro_kun
    |ω・`) なんて回答すればいいかさっぱりワカランけど回答できないみたいネ…。
  • id:ftns
    「name属性に日本語を使わない方が良いですよ」というのが
    私の答えです。ダブルクオート(")は使っても使わなくても構いません。
  • id:KeyKey
    IEの場合なぜか入力項目が1つの場合リターンキーで送信するとsubmitボタンのvalueがなぜか送信されません。
    入力項目が2つ以上の場合はリターンキーで送信してもsubmitのvalueが送信されます。
    なぜなのかはわかりません・・・

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません