GETフォームを送信すると、アクションURLからクエリ文字列が削除されます。質問する

GETフォームを送信すると、アクションURLからクエリ文字列が削除されます。質問する

次のフォームを考えてみましょう:

<form action="http://www.blabla.com?a=1&b=2" method="GET">
    <input type="hidden" name="c" value="3" /> 
</form>

このGETフォームを送信すると、パラメータabが消えてしまいます。
これには何か理由があるのでしょうか?
この動作を回避する方法はありますか?

ベストアンサー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 にクエリ文字列が含まれる場合があります。

おすすめ記事