누구나 인코딩하지 않고 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, …
이 때문에 이러한 문자는 문제없이 인코딩없이 사용할 수 있어야합니다. 물론 당신은 &;
같은 인코딩 시퀀스 때문에 사용해서는 안됩니다 &
. %
일반적으로 문자를 인코딩하는 데 사용되는 것과 동일한 이유가 유효합니다 . 그리고 =
매개 변수 이름에 값을 할당합니다.
마지막으로 인코딩되지 않은 다음을 사용하는 것이 좋습니다.
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에서 허용되지만 예약 된 용도가없는 문자를 예약되지 않은 전화라고합니다.