219 votes

Caractères autorisés dans une URL

Quelqu'un sait-il la liste complète des caractères qui peuvent être utilisées dans un GET sans être codées ? En ce moment j’utilise A-Z a-z et 0-9... mais je suis à la recherche pour trouver la liste complète.

Je suis également intéressé dans, s’il y a un cahier des charges publié pour l’ajout de venir jusqu'à des chinois, arabe url (car évidemment, cela aura un grand impact sur ma question)

198voto

Myles Points 6186

À partir de la RFC 1738 spécifications:

Ainsi, seuls les caractères alphanumériques, les caractères spéciaux "$-_.+!*'(),", et les caractères réservés utilisé pour l'usage prévu peut être utilisé non codée dans une URL.

EDIT: @Jukka K. Korpela souligne à juste titre, cette RFC a été mis à jour par la RFC 3986. Cela s'est élargi et précisé les caractères valides pour les hôtes, malheureusement il n'est pas facilement copiés et collés, mais je vais faire de mon mieux.

Dans la première appariés ordre:

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

44voto

Amber Points 159296

http://en.wikipedia.org/wiki/percent-Encoding#Types_of_URI_characters

dit que ce sont des RFC 3986 caractères non réservés (art. 2.3) ainsi que des caractères réservés (2,2 s) s’ils souhaitent conserver leur signification spéciale.

31voto

slacy Points 4417

La liste complète des personnages sans réserve 66 est dans RFC3986, ici : http://tools.ietf.org/html/rfc3986#section-2.3

Il s’agit de n’importe quel caractère dans le jeu suivant :

12voto

AdaTheDev Points 53358

De ici

Ainsi, seuls les caractères alphanumériques, les caractères spéciaux « $-. + !' (en) », et les caractères réservés destinés leurs usages réservés peuvent être utilisés non codée dans une URL.

7voto

McDowell Points 62645

Ceux-ci sont répertoriés dans RFC3986. Voir l' ABNF recueillies pour URI pour voir ce qui est autorisé où et la regex pour l’analyse et la validation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X