programing

GET 매개 변수에 허용되는 문자

projobs 2021. 1. 19. 22:16
반응형

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_STRINGbash를 사용하여 테스트를 수행하고 다음을 관찰했습니다.

~!@$%^&*()-_=+[{]}\|;:',./?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

반응형