[HTML]FORMのactionのURIにパラメータを付加したままGET送信はできないのかな
昨日、困ったことがありました。
HTMLの<form>タグでは、action属性にフォームの内容を送信するURI(URL)を記述し、method属性にHTTP要求の命令の種類(GET/POST)を指定しますよね。たとえば下記のような。
で、GETとPOSTを同時に行うこともできます。たとえば下記のようにaction属性にパラメータ付きURIを記述し、method属性をPOSTにします。
この場合、フォームを受け取ったphpでは、$_GETと$_POSTの両方にフォームの値がセットされます。どちらから来たものかを区別する必要がなければ、$_REQUESTを参照するか、$req = $_GET + $_POST;として$reqを参照します。
だったら、GETのURIにGETでパラメータを付加することもできるんじゃないかと考えて、たとえば下記のようにaction属性にパラメータ付きURIを記述し、method属性をGETにしてみました。
としてみたのですが、フォームを受け取るphpには、フォームの項目として存在するパラメータは送られてくるのですが、action属性に予め付加しておいたパラメータは送られてきませんでした。ブラウザはIE6(Internet Explorer 6)とFirefox 2で確認しましたが、両方とも同じ動作でした。
php側の$_SERVER配列の中身を見たりした見解では、GET with GET送信の場合、ブラウザはURIに付加してあったパラメータを削除した後に、?param1=value1¶m2=value2というようなフォーム内のデータを付加しているように思えます。
RFCの日本語訳文書を探すためにググりましたが、HTTPメソッドの定義や、HTMLフォームの定義などは見つかったのですが、POST with GETやGET with GET時の動作の説明のようなものは見つけることはできませんでした。どちらかというと実装側(ブラウザなど)の問題ですしね。
GET with GETが無理なら、POST with GETでおくっちまえYo!っていうツッコミは当然入るわけですが、どうしてPOST with GETを避けているかというと、対象のプラットフォームがモバイルだからなんです。モバイルでPOST with GETができるかどうか、どの機種までできて、どの機種までができないのか、などを調べていると相当な手間がかかるわけです。最近のであれば(調べていませんが)POST with GETできそうな気がしますが、昔の携帯はできるかどうか保証できないです。
今回の対策としては、使用するパラメータの一覧をhiddenで予め用意するか、POST with GETに踏み切るかな感じになるかもしれません。
ちょっとHTMLの罠(?)にハマった感じがした日でした。
No comments