次のフォームを考えてみましょう:
<form action="http://www.blabla.com?a=1&b=2" method="GET">
<input type="hidden" name="c" value="3" />
</form>
このGET
フォームを送信すると、パラメータa
とb
が消えてしまいます。
これには何か理由があるのでしょうか?
この動作を回避する方法はありますか?
ベストアンサー1
そもそも隠しパラメータってそういうものじゃないの…?
<form action="http://www.example.com" method="GET">
<input type="hidden" name="a" value="1" />
<input type="hidden" name="b" value="2" />
<input type="hidden" name="c" value="3" />
<input type="submit" />
</form>
どのブラウザでもアクション URL 内の既存のクエリ文字列が保持されるとは考えられません。
仕様(RFC1866、46ページ;HTML4.x についてセクション17.13.3)は次のように述べている。
メソッドが「get」で、アクションが HTTP URI の場合、ユーザー エージェントはアクションの値を取得し、それに「?」を追加して、次に「application/x-www-form-urlencoded」コンテンツ タイプを使用してエンコードされたフォーム データ セットを追加します。
おそらく、アクション URL をパーセントエンコードして疑問符とパラメータを埋め込んで、すべてのブラウザがその URL をそのまま残してくれることを祈る (そしてサーバーもそれを理解していることを検証する) ことができるでしょう。しかし、私はそれに頼るつもりはありません。
ちなみに、非表示でないフォーム フィールドの場合も同様です。ただし、POST の場合、アクション URL にクエリ文字列が含まれる場合があります。