[url] URL에 허용되는 문자

누구나 인코딩하지 않고 GET 내에서 사용할 수있는 전체 문자 목록을 알고 있습니까? 현재 AZ az와 0-9를 사용하고 있지만 전체 목록을 찾고 있습니다.

또한 중국어, 아랍어 URL을 추가 할 때 출시 된 사양이 있는지에 관심이 있습니다 (분명히 내 질문에 큰 영향을 미칩니다)



답변

에서 RFC 1738 사양 :

따라서 영숫자, 특수 문자 ” $-_.+!*'(),“및 예약 된 목적으로 사용되는 예약 문자 만 URL 내에서 인코딩되지 않은 상태로 사용될 수 있습니다.

편집 : @ Juka K. Korpela가 올바르게 지적 했듯이이 RFC는 RFC 3986에 의해 업데이트되었습니다 . 이것은 호스트에 유효한 문자를 확장하고 명확히했습니다. 불행히도 쉽게 복사하여 붙여 넣을 수는 없지만 최선을 다하겠습니다.

첫 번째 일치 순서 :

host        = IP-literal / IPv4address / reg-name

IP-literal  = "[" ( IPv6address / IPvFuture  ) "]"

IPvFuture   = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

IPv6address =         6( h16 ":" ) ls32
                  /                       "::" 5( h16 ":" ) ls32
                  / [               h16 ] "::" 4( h16 ":" ) ls32
                  / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
                  / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
                  / [ *3( h16 ":" ) h16 ] "::"    h16 ":"   ls32
                  / [ *4( h16 ":" ) h16 ] "::"              ls32
                  / [ *5( h16 ":" ) h16 ] "::"              h16
                  / [ *6( h16 ":" ) h16 ] "::"

ls32        = ( h16 ":" h16 ) / IPv4address
                  ; least-significant 32 bits of address

h16         = 1*4HEXDIG
               ; 16 bits of address represented in hexadecimal

IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet

dec-octet   = DIGIT                 ; 0-9
              / %x31-39 DIGIT         ; 10-99
              / "1" 2DIGIT            ; 100-199
              / "2" %x30-34 DIGIT     ; 200-249
              / "25" %x30-35          ; 250-255

reg-name    = *( unreserved / pct-encoded / sub-delims )

unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"     <---This seems like a practical shortcut, most closely resembling original answer

reserved    = gen-delims / sub-delims

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

pct-encoded = "%" HEXDIG HEXDIG


답변

URI에서 허용되는 문자는 예약되거나 예약되지 않은 문자 (또는 퍼센트 인코딩의 일부인 퍼센트 문자)

http://en.wikipedia.org/wiki/Percent-encoding#Types_of_URI_characters

RFC 3986은 예약되지 않은 문자 (sec. 2.3)와 예약 된 문자 (sec 2.2) 이며 특별한 의미를 유지해야 한다고 말합니다 . 또한 퍼센트 인코딩의 일부인 퍼센트 문자.


답변

66 개의 예약되지 않은 문자의 전체 목록은 RFC3986에 있습니다. http://tools.ietf.org/html/rfc3986#section-2.3

이것은 다음 정규식 세트의 모든 문자입니다.

[A-Za-z0-9_.\-~]


답변

독일어 키보드에서 사용 가능한 모든 문자를 URL 매개 변수로 사용하여 웹 사이트 (apache)를 요청하여 테스트했습니다.

http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~

이들은 인코딩되지 않았습니다 :

^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~

다음에 인코딩되지 않음 urlencode():

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_

다음에 인코딩되지 않음 rawurlencode():

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~

참고 : RFC 1738 때문에 PHP 5.3.0 이전에 rawurlencode()인코딩 ~되었습니다 . 그러나 이것은 RFC 3986 으로 대체 되었으므로 안전하게 사용할 수 있습니다. 그러나 RFC 3986에 언급되지 않았기 때문에 예를 들어 인코딩 된 이유를 이해하지 못합니다 .{}rawurlencode()

내가 만든 추가 테스트는 메일 텍스트의 자동 링크에 관한 것입니다. Mozilla Thunderbird, aol.com, outlook.com, gmail.com, gmx.de 및 yahoo.de를 테스트했으며 다음 문자가 포함 된 URL을 완전히 링크했습니다.

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@

물론 ?이 또한 연결되었지만 한 번만 사용 된 경우에만 연결됩니다.

어떤 사람들은 이제 rawurlencode()문자 만 사용하라고 제안 하지만 누군가이 웹 사이트를 여는 데 문제가 있다고 들었습니까?

별표
http://wayback.archive.org/web/*/http://google.com

콜론
https://ko.wikipedia.org/wiki/Wikipedia : 소개

플러스
https://plus.google.com/+google

서명 할 때 콜론, 쉼표 및 느낌표
https : //www.google.com/maps/place/USA/@36.2218457, …

이 때문에 이러한 문자는 문제없이 인코딩없이 사용할 수 있어야합니다. 물론 당신은 &;같은 인코딩 시퀀스 때문에 사용해서는 안됩니다 &amp;. %일반적으로 문자를 인코딩하는 데 사용되는 것과 동일한 이유가 유효합니다 . 그리고 =매개 변수 이름에 값을 할당합니다.

마지막으로 인코딩되지 않은 다음을 사용하는 것이 좋습니다.

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@

그러나 무작위로 생성 된 URL이 .!필요한 경우을 사용하지 않아야합니다. URL이 문장의 끝을 표시하고 일부 메일 앱은 URL의 마지막 문자를 자동 링크하지 않기 때문입니다. 예:

Visit http://example.com/foo=bar! !


답변

에서 여기

따라서 $-_.+!*'(),
예약 된 목적으로 사용되는 영숫자, 특수 문자 및 예약 문자 만 URL 내에서 인코딩되지 않은 상태로 사용될 수 있습니다.


답변

이들은 RFC3986 에 나열되어 있습니다. 참고 항목 URI에 대한 수집 ABNF을 어디에 허용하고 상황을 확인하기 위해 정규식 구문 분석 / 검증합니다.


답변

RFC3986 은 URI에서 사용할 수있는 두 가지 문자 세트를 정의합니다.

  • 예약 된 문자 ::/?#[]@!$&'()*+,;=

    예약 된 = gen-delims / sub-delims

    gen-delims = “:”/ “/”/ “?” / “#”/ “[“/ “]”/ “@”

    하위 배달 = “!” / “$”/ “&”/ ” ‘”/ “(“/ “)”/ “*”/ “+”/ “,”/ “;” / “=”

    예약 문자의 목적은 URI 내의 다른 데이터와 구별 할 수있는 일련의 구분 문자를 제공하는 것입니다. 예약 문자를 해당 퍼센트 인코딩 된 옥텟으로 대체하는 URI는 동일하지 않습니다.

  • 예약되지 않은 캐릭터 :A-Za-z0-9-_.~

    예약되지 않음 = ALPHA / DIGIT / “-“/ “.” / “_”/ “~”

    URI에서 허용되지만 예약 된 용도가없는 문자를 예약되지 않은 전화라고합니다.