이 양식을 고려하십시오.
<form action="http://www.blabla.com?a=1&b=2" method="GET">
<input type="hidden" name="c" value="3" />
</form>
이 양식 (GET 양식)을 제출하면 매개 변수 a와 b가 사라집니다. 그 이유가 있습니까? 이 행동을 피할 수있는 방법이 있습니까?
이 양식을 고려하십시오.
<form action="http://www.blabla.com?a=1&b=2" method="GET">
<input type="hidden" name="c" value="3" />
</form>
이 양식 (GET 양식)을 제출하면 매개 변수 a와 b가 사라집니다. 그 이유가 있습니까? 이 행동을 피할 수있는 방법이 있습니까?
답변:
숨겨진 매개 변수가 무엇입니까 ...로 시작하지 않습니까?
<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; HTML 4.x 섹션 17.13.3) 상태 :
메소드가 "get"이고 조치가 HTTP URI 인 경우, 사용자 에이전트는 action 값을 가져 와서`? '를 추가합니다. 그런 다음 "application / x-www-form-urlencoded"컨텐츠 유형을 사용하여 인코딩 된 양식 데이터 세트를 추가합니다.
어쩌면 동작 URL을 퍼센트 인코딩하여 물음표와 매개 변수를 포함시킨 다음 손가락을 교차하여 모든 브라우저가 해당 URL을 그대로두기를 바랍니다 (그리고 서버도 그것을 이해하는지 확인). 그러나 나는 결코 그것에 의존하지 않을 것입니다.
그건 그렇고 : 숨겨지지 않은 양식 필드와 다르지 않습니다. POST의 경우 작업 URL에 쿼리 문자열이 포함될 수 있습니다.
HTML5에서 이는 스펙 별 동작입니다.
http://www.w3.org/TR/2011/WD-html5-20110525/association-of-controls-and-forms.html#form-submission-algorithm을 참조하십시오 .
"4.10.22.3 양식 제출 알고리즘", 단계 17을 참조하십시오. 조회 문자열을 사용하여 http / s URI에 대한 GET 양식의 경우 :
destination은 해당
<query>
구성 요소가 조회로 대체되는 것을 제외하고 조치와 동일한 새 URL이되도록하십시오 (적절한 경우 U + 003F QUESTION MARK 문자 (?) 추가).
따라서 브라우저는 URI의 기존 "? ..."부분을 휴지통에 버리고 양식에 따라 새 것으로 대체합니다.
HTML 4.01에서이 스펙은 잘못된 URI를 생성합니다. 대부분의 브라우저는 실제로이 작업을 수행하지 않았습니다.
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3의 4 단계를 참조하십시오 . URI에는? 이미 포함되어 있어도 추가됩니다.
?
액션 URL에서 뒤에있는 모든 것이 제거됩니까? 따라서 액션 URL의 GET 매개 변수에 대상이 포함되어 있으면 양식을 처리 해야하는 곳은 무엇입니까? 처럼 : action="index.php?site=search"
. 숨겨진 입력 필드에 GET 매개 변수를 넣는 것이 좋은 아이디어인지 확실하지 않습니다.
GET 정보가 포함 된 테이블에서 간단한 foreach를 사용하면됩니다. 예를 들어 PHP에서 :
foreach ($_GET as $key => $value) {
echo("<input type='hidden' name='$key' value='$value'/>");
}
두 항목 (a 및 b)을 숨겨진 입력 요소 및 C로 포함해야합니다.
Location:
최종 사용자와 상호 작용하지 않으려는 경우 서버 리디렉션 .
양식 작업에 대해 비슷한 문제가 발생했습니다.
<form action="http://www.example.com/?q=content/something" method="GET">
<input type="submit" value="Go away..." />
</form>
버튼은 사용자를 사이트로 안내하지만 쿼리 정보가 사라져 사용자가 원하는 콘텐츠 페이지가 아닌 홈 페이지에 도착했습니다. 필자의 경우 해결책은 사용자가 원하는 페이지로 연결되는 쿼리없이 URL을 코딩하는 방법을 찾는 것입니다. 이 경우 내 목표는 Drupal 사이트였습니다 /content/something
. 노드 번호 (예 :)를 사용할 수도 있습니다 /node/123
.
당신의 건설은 불법입니다. 양식의 조치 값에 매개 변수를 포함 할 수 없습니다. 이 작업을 시도하면 브라우저의 특성에 따라 달라집니다. 다른 브라우저가 아닌 한 브라우저에서 작동해도 놀라지 않을 것입니다. 그것이 작동하는 것처럼 보일지라도, 다음 버전의 브라우저가 동작을 바꿀 수 있기 때문에 나는 그것에 의존하지 않을 것입니다.
"하지만 쿼리 문자열과 숨겨진 입력에 매개 변수가 있다고하면 어떻게해야합니까?" 당신이 할 수있는 일은 오류를 해결하는 것입니다. "하지만 내 URL이 슬래시 대신 퍼센트 부호를 사용한다고 말하면 어떻게해야합니까?" 유일하게 가능한 대답은 URL을 수정할 수 있다는 것입니다.