2012-11-14 15 views
10

Jakie znaki są dozwolone w ciągu zapytania adresu URL?Co to jest poprawny ciąg kwerendy adresu URL?

Czy ciągi zapytań muszą być zgodne z określonym formatem?

+1

coś innego niż te potrzeby być ocalałem są dozwolone w adresie URL, zobaczyć, co trzeba uciec w tej kwestii: http: //stackoverflow.com/questions/2322764/what-characters-must-be-escaped-in-an-http-query-string –

Odpowiedz

10

Per http://tools.ietf.org/html/rfc3986

w rozdziale 2.2 zastrzeżone znaki następujące znaki są wymienione:

zastrzeżone = GEN-delims/sub-delims

GEN-delims = „”/„/"/"? "/" # "/" ["/"] "/" @ "

sub-delims ="! "/" $ "/" & "/" ""/"("/")"/"*"/„+”/„”/„” /„=”

Spec potem mówi:

Jeżeli dane dla składnika URI byłoby sprzeczne z zarezerwowanego bohatera celu jako separatora, następnie dane będące w konflikcie muszą być zakodowane w procentach przed utworzeniem URI.

Następnie w sekcji 2.3 niezarezerwowany znaków, po wymieniono:

nieograniczony = alfa/CYFRA/„-”// „_”/„~”

„”.
+2

[RFC 3986 - ** Rozdział 3.4 **] (http: //tools.ietf. org/html/rfc3986 # strona 23) w szczególności opisuje ciąg zapytania i w szczególności obejmuje sub-delims i garść innych. Podsumowując: 'A' -'Z',' a' -'z', '0' -'9',' -', '.',' _', '~', '!', '$' , '&', '' ',' (',') ',' * ',' + ',', ','; ',' = ',': ',' ​​@ ','/',' ? ' – MrWhite

11

Wikipedia ma swoją odpowiedź: http://en.wikipedia.org/wiki/Query_string

"URL Kodowanie: Niektóre znaki nie mogą być częścią adresu URL (na przykład przestrzeń) i niektóre inne znaki mają specjalne znaczenie w adresie URL: na przykład znak # może być użyty do dalszego określenia podsekcji (lub fragmentu) dokumentu; znak = służy do oddzielenia nazwy od wartości. Ciąg zapytania może wymagać przekonwertowania, aby spełnić te ograniczenia. Można to zrobić za pomocą schematu znanego jako kodowanie URL.

W szczególności kodowania ciąg kwerendy używa następujących zasad: ' '

  • Letters (AZ i AZ), cyfry (0-9) i znaki' -', '~' i "_" pozostaje niezmienione
  • SPACE jest zakodowane jako "+" lub% 20 [wymagane wytłumaczenie]
  • Wszystkie pozostałe znaki są zakodowane jako% FF reprezentacja szesnastkowa z dowolnymi znakami spoza ASCII zakodowanymi jako UTF-8 (lub inne określone kodowanie)

T on oktet odpowiadający znakowi tyldy ("~") jest często kodowany jako "% 7E" przez starsze implementacje przetwarzania URI; "% 7E" można zastąpić przez "~" bez zmiany jego interpretacji. Kodowanie spacji jako "+" i wybór znaków "jak jest" odróżnia to kodowanie od RFC 1738. "

Jeśli chodzi o format, ciągi zapytań są parami wartości nazw. URL.Każda para wartości nazw jest oddzielona znakiem ampersand (&), a nazwa (klucz) i wartość są oddzielone znakiem równości (=). na przykład. http://domain.com?key=value&secondkey=secondvalue

Pod Struktura w odniesieniu Wikipedia ja stanowił:

  • Znak zapytania jest używany jako separator i nie jest częścią łańcucha zapytania.
  • Łańcuch zapytania składa się z serii par z wartościami pól
  • W obrębie każdej pary nazwy pól i wartości są oddzielone znakiem równości "=".
  • Serię par rozdzielono znakiem ampersand, "&" (lub średnikiem, ";" dla adresów URL osadzonych w kodzie HTML i nie generowanych przez ..., patrz poniżej).
  • W3C zaleca, aby wszystkie serwery WWW obsługiwały separatory średnika oprócz separatorów ampersand [6], aby umożliwić łańcuchom zapytań aplikacji/x-www-urlencoded w URL-ach w dokumentach HTML bez konieczności wprowadzania znaków ampersands escape.
+0

Czy możesz podać cytat z ostatniego akapitu? –

+0

Dodałem ten akapit na podstawie osobistych doświadczeń, ale zaktualizowałem i dodałem więcej informacji, które mogłem znaleźć, aby go utworzyć. W ten sposób zauważyłem, że pary klucz-wartość nie tylko są oddzielone znakiem ampersand, ale mogą być średnikiem, chociaż nigdy wcześniej nie natrafiłem na nie. Ponadto znak zapytania nie jest częścią QS, ale jest raczej separatorem. – cbillowes

+1

W tekście odpowiedzi: "każda para wartości nazw jest poprzedzana znakiem ampersand" słowo ("prefiksowane") wprowadza w błąd. Dalej w dół, jest poprawne "... pary są oddzielone ...". – laune

1

Ten link ma odpowiedź i sformatowane wartości, których potrzebujesz.

https://perishablepress.com/url-character-codes/

dla wygody, jest to lista:

<  %3C 
>  %3E 
#  %23 
%  %25 
{  %7B 
}  %7D 
|  %7C 
\  %5C 
^  %5E 
~  %7E 
[  %5B 
]  %5D 
`  %60 
;  %3B 
/ %2F 
?  %3F 
:  %3A 
@  %40 
=  %3D 
&  %26 
$  %24 
+  %2B 
"  %22 
space  %20 
+0

Należy pamiętać, że [odpowiedzi dotyczące tylko łącza] (http://meta.stackoverflow.com/tags/link-only-answers/info) są odradzane, odpowiedzi w formacie SO powinny być punktem końcowym wyszukiwania rozwiązania (vs. jeszcze jeden przystanek referencji, które z czasem zanikają). Proszę rozważyć dodanie samodzielnego streszczenia tutaj, zachowując odnośnik jako odniesienie. – kleopatra

Powiązane problemy