URL이 http://example.com/foo?bar
유효합니까?
나는 어떤 식 으로든 다른 식으로 말하는 공식에 대한 링크를 찾고 있습니다. 간단한 예 / 아니오 답변이나 일화적인 증거로는 잘릴 수 없습니다.
URL이 http://example.com/foo?bar
유효합니까?
나는 어떤 식 으로든 다른 식으로 말하는 공식에 대한 링크를 찾고 있습니다. 간단한 예 / 아니오 답변이나 일화적인 증거로는 잘릴 수 없습니다.
답변:
URI RFC는 쿼리 문자열의 형식을 강제하지 않습니다. 쿼리 문자열에는 종종 이름-값 쌍이 포함된다는 점이 인식되지만 필수는 아닙니다 (예 : 종종 다른 URI를 포함 할 것).
3.4. 질문
쿼리 구성 요소에는 경로 구성 요소 (섹션 3.3)의 데이터와 함께 URI의 체계 및 명명 권한 (있는 경우) 범위 내에서 리소스를 식별하는 비 계층 데이터가 포함됩니다. ...
... 그러나 쿼리 구성 요소는 종종 "key = value"쌍의 형태로 식별 정보를 전달하는 데 사용되며 자주 사용되는 값 하나는 다른 URI에 대한 참조입니다.
HTML 은 HTTP GET을 통해 제출 된 양식이 양식 값을 "? key1 = value1 & key2 = value2 ..."형식으로 이름-값 쌍으로 인코딩해야합니다 (적절하게 인코딩 됨). 쿼리 문자열 구문 분석은 서버 측 코드 (예 : Java 서블릿 엔진)에 달려 있습니다.
사용하는 서버 측 프레임 워크를 식별 할 수는 없지만 서버 측 프레임 워크는 쿼리 문자열이 항상 이름-값 쌍에 있다고 가정하고 그렇지 않은 쿼리 문자열에서 질식 할 수 있습니다. 해당 형식으로 (예 :) ?bar
. 쿼리 문자열을 구문 분석하는 고유 한 사용자 지정 코드 인 경우 해당 쿼리 문자열 형식을 처리해야합니다. 프레임 워크 인 경우 문서를 참조하거나 간단히 테스트하여 처리 방법을 확인해야합니다.
그들은 완벽하게 유효합니다. 당신은 그들이 폭도 메신저 뒤에 조용히 서있는 큰 근육질의 사람과 동등한 것으로 간주 할 수 있습니다. 그 사람은 이름이없고 말도하지 않지만 그의 존재는 정보를 전달합니다.
"http"체계는 HTTP 프로토콜을 통해 네트워크 리소스를 찾는 데 사용됩니다.이 섹션에서는 http URL의 체계 별 구문과 의미를 정의합니다. " http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
예, 물음표 뒤에는 아무 것도 유효합니다. 서버가 다르게 해석 할 수도 있지만 일화 적으로 일부 언어는이를 부울 값으로 취급하는 것을 볼 수 있습니다.
URI 스펙의 유일한 관련 부분은 첫 번째 와 첫 번째 사이의 모든 내용 을 쿼리의 스펙 정의에 맞추는 것입니다. 와 같은 문자를 포함 할 수 있습니다 . 이는 또는 같은 쿼리 문자열 이 유효 함을 의미 합니다.?
#
[:/.?]
?bar
?ten+green+apples
isindex
HTML5는 의미가 없습니다.
그것은 제공하는 것 되지 않는 이름없이 단지 형태의 첫 번째 요소로 사용하고,을 제출하십시오.
항목 이름이 "isindex"이고 유형이 "text"이고 이것이 양식 데이터 세트의 첫 번째 항목 인 경우 결과 값을 추가하고이 항목의 나머지 하위 단계를 건너 뛰고 다음 항목으로 이동하십시오. 항목 (있는 경우) 또는 전체 알고리즘의 다음 단계 (그렇지 않은 경우)
isindex 플래그는 레거시 전용입니다. HTML 문서를 준수하는 양식은이 플래그 세트로 디코딩해야하는 페이로드를 생성하지 않습니다.
isindex가 마지막 으로 지원 된 시간 은 HTML3 입니다. HTML5에서 사용하면 이전 버전과의 호환성을 쉽게 제공 할 수 있습니다.
이 형식의 URI에 대한 라이브러리 지원은 다양하지만 일부 라이브러리는 레거시 지원을 제공하여 쉽게 사용할 수 있습니다 isindex
.
Perl의 URI 와 같은 일부 라이브러리는 이러한 종류의 구조를 구문 분석하는 메소드를 제공합니다.
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(특별 지원 없음)더 빈번한 또 다른 예로, node.js
일반 경로를 사용하고 다음 중 하나로 쉽게 구문 분석합니다.
parseQueryString
)이와 유사한 것을 따르는 대부분의 다른 URI 구문 분석 API.
parse_url
는 비슷한 구현 방식을 따르지만 쿼리의 문자열 만 반환합니다. 필요한 객체로 파싱k=>v
parse_string()
유효합니다 : Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. 구문 구성 요소) .
isindex
name
HTML5에서 사용되지 않는 마술
더 이상 사용되지 않는이 기능을 사용하면 양식 제출에서 해당 URL을 생성하여 HTML에 유효한지 더 많은 증거를 제공 할 수 있습니다. 예 :
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
다음 유형의 URL을 생성합니다.
?bar
표준 : https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
그러나 https://stackoverflow.com/a/41689431/895245 에서 언급했듯이 더 이상 사용되지 않습니다.
다른 모든 답변이 설명했듯이 검사, 특히 부울 종류의 항목에 완벽하게 유효합니다.
다음은 이름별로 쿼리 문자열을 가져 오는 간단한 함수입니다.
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
그리고 당신은 당신이 찾고있는 쿼리 문자열이 존재하는지 여부를 확인하고 싶다면 다음과 같은 간단한 일을 할 수 있습니다 :
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
이 exampleQueryString
될 것입니다 false
함수가 쿼리 문자열을 찾을 수없는 경우, 그렇지 않으면 될 것입니다 true
.