GET 매개 변수에 허용되는 문자
인코딩 또는 이스케이프없이 GET 매개 변수에서 허용되는 문자는 무엇입니까? 나는 다음과 같은 것을 의미합니다.
http://www.example.org/page.php?name=XYZ
XYZ 대신 무엇을 가질 수 있습니까? 다음 캐릭터 만 생각합니다.
- az (AZ)
- 0-9
- -
- _
전체 목록입니까, 아니면 추가 문자가 허용됩니까?
당신이 나를 도울 수 있기를 바랍니다. 미리 감사드립니다!
있습니다 예약 문자 - 예약 된 의미를 가지고, 그하다 구분 기호, :/?#[]@
- 그리고 subdelimiters은 -!$&'()*+,;=
예약되지 않은 문자 ( 영숫자 및 -._~
인코딩되지 않음) 라는 문자 세트도 있습니다.
즉, 예약되지 않은 문자 집합에 속하지 않는 것은 특별한 의미가없는 경우 (예 : GET
매개 변수 의 일부로 전달되는 경우) % 인코딩되어야 합니다.
RFC3986 : URI (Uniform Resource Identifier) : 일반 구문 도 참조하십시오 .
이 질문은 인코딩하거나 이스케이프하지 않고 GET 매개 변수에 허용 되는 문자를 묻습니다 .
에 따르면 RFC3986 (일반 URL 구문) 및 RFC7230 섹션 2.7.1 (HTTP / S URL 구문)는 퍼센트 인코딩에 필요한 문자 만은의 그 밖에 질의 , 설정 아래의 정의를 참조하십시오.
그러나 HTML5, 웹 양식 및 더 이상 사용되지 않는 색인화 된 검색 , W3C 권장 사항 과 같은 추가 사양이 있습니다 . 이러한 문서는 일부 문자, 특히 = & + 와 같은 기호에 특별한 의미를 추가합니다 . .
여기에있는 다른 답변은 "/" "?"를 포함하여 대부분의 예약 된 문자를 인코딩해야한다고 제안합니다. 정답이 아닙니다. 실제로 RFC3986, 섹션 3.4에서는 백분율 인코딩 "/" "?"를 권장하지 않습니다. 문자.
이러한 문자의 퍼센트 인코딩을 피하는 것이 유용성에 더 좋습니다.
RFC3986은 쿼리 구성 요소를 다음과 같이 정의합니다.
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
백분율 인코딩 메커니즘은 해당 옥텟의 해당 문자가 허용 된 집합 외부에 있거나 구성 요소의 구분 기호로 사용되거나 구성 요소 내에서 사용될 때 구성 요소의 데이터 옥텟을 나타내는 데 사용됩니다.
결론은 XYZ 부분이 다음을 인코딩해야한다는 것입니다.
special: # % = & ;
Space
out of query set: [ ]
non ASCII encodable characters
특수 기호가 아닌 경우 = &; 아르 키 값 = 세퍼레이터.
다른 문자 인코딩은 허용되지만 필수는 아닙니다.
에서 RFC 1738 있는 문자의 URL에서 사용할 수 있습니다 :
영숫자, 특수 문자 "$ -_. +! * '()"및 예약 목적으로 사용되는 예약 문자 만 URL 내에서 인코딩되지 않은 상태로 사용할 수 있습니다.
예약 된 문자는 ";", "/", "?", ":", "@", "="및 "&"입니다. 즉, 사용하려는 경우 URL 인코딩이 필요합니다.
영숫자 및 모든
~
-
_
.
!
*
'
(
)
,
URL 내에서 유효합니다.
다른 모든 문자는 인코딩되어야합니다.
Chrome 주소 표시 줄과 $QUERY_STRING
bash를 사용하여 테스트를 수행하고 다음을 관찰했습니다.
~!@$%^&*()-_=+[{]}\|;:',./?
및 grave (backtick)
일반 텍스트로를 통해 전달됩니다.
,
"
, <
및 >
변환됩니다 %20
, %22
, %3C
그리고 %3E
각각.
#
예 olde anchor에 의해 사용되기 때문에 무시됩니다 .
개인적으로 총알을 물고 base64로 인코딩한다고 말하고 싶습니다. :)
URI (URN 및 URL 포함) 인코딩과 관련된 모든 규칙은 RFC1738 및 RFC3986에 지정되어 있습니다. 다음은 길고 지루한 문서의 TL; DR입니다.
URL 인코딩이라고도하는 퍼센트 인코딩은 특정 상황에서 URI의 정보를 인코딩하는 메커니즘입니다. URI에 허용되는 문자는 예약되었거나 예약되지 않았습니다. 예약 된 문자는 때때로 특별한 의미가있는 문자이지만 인코딩이 필요한 유일한 문자는 아닙니다.
인코딩이 필요없는 66 개의 예약되지 않은 문자가 있습니다. abcdefghiklmopqrstuvwABCDEFGHIKLMOPQRSTUVWXYZ0123456789-_.~
인코딩해야하는 18 개의 예약 된 문자가 !*'();:@&=+$,/?#[]
있으며 다른 모든 문자는 인코딩되어야합니다.
To percent-encode a character, simply concatenate "%" and its ASCII value in hexadecimal. The php functions "urlencode" and "rawurlencode" do this job for you.
"." | "!" | "~" | "*" | "'" | "(" | ")"
are also acceptable [RFC2396]. Really, anything can be in a GET parameter if it is properly encoded.
ReferenceURL : https://stackoverflow.com/questions/1455578/characters-allowed-in-get-parameter
'programing' 카테고리의 다른 글
Java SimpleDateFormat("yyy-MM-dd'T'")HH:mm:ss'Z'") 시간대를 IST로 지정합니다. (0) | 2022.08.09 |
---|---|
스플라이스가 제대로 작동하지 않음 내 객체 목록 VueJs (0) | 2022.08.09 |
= 연산자가 정의되지 않은 구조체에서 작동하는 이유는 무엇입니까? (0) | 2021.01.19 |
프로세스에서 반환 값 가져 오기 (0) | 2021.01.19 |
aov에서 p- 값 추출 (0) | 2021.01.19 |