ブラウザから送られてくるフォームデータの文字コードは何になるのか。
軽くググってみた限りでは、そのフォームがあるHTMLファイルの文字コードになることが暗黙の了解的に書かれていて、(常識だからなのか?)そういう仕様である、と明記してあるものは見つけられませんでした。これ以上ググるのもめんどくさいので、自分で検証してみました。
検証用サイト(別窓で開きます)
検証用サイトは PHP で作りました。
フォームの HTML は ASCII のみで記載し、メタタグの charset 指定をリンクで切り替える仕様になっています。
textarea に日本語を記載して submit すると、mb_detect_encoding 関数で判定した結果を画面表示します。
試した環境は、Windows XP の IE 8 と Firefox 6.0.2 。
結果は以下の通り。まぁ予想通りですね。
- メタタグで charset 指定している場合は、その文字コードで送信される
- メタタグに charset 指定がない場合は、Shift_JIS で送信される(OSのデフォルト文字コード?Mac や Linux ではどうなるのか?誰か試して結果を教えてください・・・)
- メタタグの charset 指定を無視して手動でブラウザの表示文字コードを変えると、変更後の文字コードで送信される
ちなみに上記の検証用サイトは、今回の検証の趣旨とは関係ないですが、mb_detect_encoding の誤検知っぷりテストにも使えます。フォームの charset を EUC-JP にして、textarea に 製造 と入れて submit すると、UTF-8 と表示されます。 やはりセキュアなアプリを目指すには、自動検出はしてはいけないですね。 きちんと charset 指定していれば、その文字コードで送られてくると確認できたので、正規のフォームから送られてくるデータを想定した場合、自動検出を使う必要はない。百害あって一利なしです。
※異なる環境で試していただけた方いましたら、是非コメントでお知らせください。
0 件のコメント:
コメントを投稿