쿼리 문자열 매개 변수 및 숨겨진 매개 변수가 포함 된 GET 양식을 제출하면 사라집니다.
이 양식을 고려하십시오.
<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에는? 이미 포함되어 있어도 추가됩니다.
GET 정보가 포함 된 테이블에서 간단한 foreach를 사용하면됩니다. 예를 들어 PHP에서 :
foreach ($_GET as $key => $value) {
echo("<input type='hidden' name='$key' value='$value'/>");
}
두 항목 (a 및 b)을 숨겨진 입력 요소 및 C로 포함해야합니다.
양식 작업에 대해 비슷한 문제가 발생했습니다.
<form action="http://www.example.com/?q=content/something" method="GET">
<input type="submit" value="Go away..." />
</form>
버튼은 사용자를 사이트로 안내하지만 쿼리 정보가 사라져 사용자가 원하는 콘텐츠 페이지가 아닌 홈 페이지에 도착했습니다. 필자의 경우 해결책은 사용자가 원하는 페이지로 연결되는 쿼리없이 URL을 코딩하는 방법을 찾는 것입니다. 이 경우 내 목표는 Drupal 사이트였습니다 /content/something
. 노드 번호 (예 :)를 사용할 수도 있습니다 /node/123
.
당신의 건설은 불법입니다. 양식의 조치 값에 매개 변수를 포함 할 수 없습니다. 이 작업을 시도하면 브라우저의 특성에 따라 달라집니다. 다른 브라우저가 아닌 하나의 브라우저에서 작동해도 놀라지 않을 것입니다. 그것이 작동하는 것처럼 보일지라도, 다음 버전의 브라우저가 동작을 바꿀 수 있기 때문에 나는 그것에 의존하지 않을 것입니다.
"But lets say I have parameters in query string and in hidden inputs, what can I do?" What you can do is fix the error. Not to be snide, but this is a little like asking, "But lets say my URL uses percent signs instead of slashes, what can I do?" The only possible answer is, you can fix the URL.
If you need workaround, as this form can be placed in 3rd party systems, you can use Apache mod_rewrite like this:
RewriteRule ^dummy.link$ index.php?a=1&b=2 [QSA,L]
then your new form will look like this:
<form ... action="http:/www.blabla.com/dummy.link" method="GET">
<input type="hidden" name="c" value="3" />
</form>
and Apache will append 3rd parameter to query
This is in response to the above post by Efx:
If the URL already contains the var you want to change, then it is added yet again as a hidden field.
Here is a modification of that code as to prevent duplicating vars in the URL:
foreach ($_GET as $key => $value) {
if ($key != "my_key") {
echo("<input type='hidden' name='$key' value='$value'/>");
}
}
<form ... action="http:/www.blabla.com?a=1&b=2" method ="POST">
<input type="hidden" name="c" value="3" />
</form>
change the request method to' POST' instead of 'GET'.
I usually write something like this:
foreach($_GET as $key=>$content){
echo "<input type='hidden' name='$key' value='$content'/>";
}
This is working, but don't forget to sanitize your inputs against XSS attacks!
'Programing' 카테고리의 다른 글
왜 파이썬에는 부호 함수가 없습니까? (0) | 2020.04.30 |
---|---|
동적 변수에서 속성을 사용할 수 있는지 테스트 (0) | 2020.04.30 |
Akka Kill vs. Stop Pill 대 Poison Pill? (0) | 2020.04.30 |
CSS를 사용하여 배경 이미지를 뒤집는 방법? (0) | 2020.04.30 |
Java의 부동 및 이중 데이터 유형 (0) | 2020.04.30 |