携帯電話のauから、↑この画面にアクセスして登録ボタンを押すと画面が文字化けします。
しかし、解除ボタンを押すと文字化けしません。
アドレスを入れないで登録ボタン、解除ボタンを押した場合は同じエラー画面が表示されますが、登録側だと文字化けし、解除側だと
文字化けしないので、どこがおかしいのか分からずに困ってます。
どなたかお分かりになる方が居るようでしたら教えてください。
失礼しました。
文字エンコーディングがEUC-JPになっているのに、メタタグではShift-Jisに指定されているようです。
このせいでは?
確かにそのようになってますが、解除画面では文字化けせず、登録画面では文字化けしてしまいます。
コメントが付けられないので解答欄にて。
半角カタカナが悪さしているのかもしれません。
登録画面では半角カタカナが沢山使用されているようです。
解除画面ではカタカナが全て全角カタカナになっています。
半角カタカナは環境によっては文字化けします。
auのe-mailも駄目なはずです。
半角カタカナを全て全角カタカナに変換したら、解決するかもしれません。
>解除画面では文字化けせず、登録画面では文字化けしてしまいます。
自動文字コード判定が成功して、解除の方はEUC-JPと認識されているのではないでしょうか?
submitのラベル文字をともに[OK]にして、エラー画面表示での結果に差異がでるか確認してみてください。
とりあえず状況的にはこんな感じになっているようです。
・コンテンツ自体の文字コードはEUC-JP
・レスポンスヘッダでの文字コードの指定はEUC-JP
・HTMLのmeta要素での文字コードの指定はShift_JIS
・「解除」の方ではContent-Lengthが出力されておらず、chunkedエンコーディングになっている
・「登録」の方ではContent-Lengthが出力されている
文字化けが発生する原因のひとつとして、文字コードの誤認というのがあります。
ここからは完全な推測になりますが、コンテンツを一気に読み取れないchunkedエンコーディングではレスポンスヘッダでの文字コードの指定しか使わず、一気に読み取れる場合はHTMLのmeta要素での指定も使う(そっちの方が正しいものとして扱う)ということになっていれば、そういう現象が発生します。今回の場合、meta要素での指定が間違っている為、それが採用されてしまうと化けてしまう訳です。
こういう端末側の謎の仕様せいで変な挙動になる場合は、とりあえず仕様的に正しい状態にするのが一番です。
auだけではなくi-modeも視野に入れるとすると、文字コードはShift_JISでContent-Lengthを出力するようにするのがベターです。
以下のようにすれば意図通りに動作するようになると思います。
・CGIプログラムの出力をShift_JISに変換して出力するようにする
・Content-Typeに「text/html; charaset=Shift_JIS」を指定する
・Content-Lengthを出力するようにする
・htmlのmeta要素は削除する
携帯電話のauから確認してみてください。