Odpowiedź nie jest prosta.
Poniższy tekst pochodzi z sekcji 3.2.2 RFC 3986:
Host identyfikowane przez adres dosłownym Protokół internetowy w wersji 6
[RFC3513] lub później wyróżnia zamykający IP dosłownym
w nawiasach kwadratowych („[” i „] "). Jest to jedyne miejsce, w którym znaki o nawiasach kwadratowych są dozwolone w składni URI.
Ten wydaje odpowiedzieć na pytanie o kategorycznie stwierdzając, że nawiasy kwadratowe nie są dozwolone nigdzie indziej w URI. Istnieje jednak różnica między znakiem nawias kwadratowy a znakiem procentu zakodowanej nawiasy kwadratowe.
ekstrahuje od początku odcinka 3 RFC 3986 następujące:
Elementy składniowe
Ogólny składni URI zawiera hierarchiczną kolejność
komponenty określane jako schemat, autorytatywny, ścieżka, zapytanie i fragment
.
URI = schemat ":" hier-part ["?" Zapytanie] [ "#" fragment]
więc "zapytanie" jest elementem "URI".
Poniżej ekstrahowano z sekcji 2.2 RFC 3986:
2,2. Zarezerwowane znaki
Identyfikatory URI zawierają komponenty i podkomponenty rozdzielone znakami
w zestawie "zarezerwowanym". Znaki te są nazywane
„zastrzeżone”, ponieważ może (lub nie mogą) być zdefiniowane jako ograniczniki przez
składnia rodzajowe, przez każdego składni programu specyficznego lub przez składni
realizacji konkretnych algorytmu dereferencing URI jest.
Jeśli dane dotyczące komponentu URI będą w konflikcie z zarezerwowanym celem znaku jako ogranicznika, wówczas dane będące w konflikcie muszą być
zakodowane procentowo przed utworzeniem URI.
reserved = gen-delims/sub-delims
gen-delims = ":"/"/"/"?"/"#"/"["/"]"/"@"
sub-delims = "!"/"$"/"&"/"'"/"("/")"
/"*"/"+"/","/";"/"="
nawiasy kwadratowe więc mogą pojawić się w ciągu kwerendy, ale tylko wtedy, gdy są one kodowane procent. Chyba że są one nie być wyjaśnione w dalszej części 2.2:
URI produkujące aplikacje powinny oktetów danych procent zakodować że
odpowiadają znaków w zarezerwowanym zestawu chyba że te znaki
są wyraźnie dozwolone przez Schemat URI do reprezentowania danych w tym komponencie
.Jeśli zarezerwowany znak znajduje się w składniku URI i nie jest znana rola ograniczająca dla tego znaku, to musi być interpretowana jako reprezentująca oktet danych odpowiadający temu kodowaniu znaków w US-ASCII.
Więc ponieważ nawiasy kwadratowe są dozwolone tylko w „host” podskładnika, że „powinien” być procent zakodowane w innych elementów i składowych, w tym przypadku w „zapytań” komponentu, chyba RFC 3986 wyraźnie pozwala niekodowany nawiasy kwadratowe do reprezentowania danych w składniku zapytania, co nie ma miejsca.
Jeśli jednak "aplikacja do tworzenia URI" nie zrobi tego, co powinna "zrobić", przez pozostawienie kwadratowych nawiasów niezakodowanych w zapytaniu, to czytelnicy URI nie odrzucają URI wprost. Zamiast tego nawiasy kwadratowe należy uznać za przynależne do danych komponentu zapytania, ponieważ nie są one używane jako separatory w tym komponencie.
To dlatego, na przykład, nie jest to naruszenie RFC 3986, gdy PHP przyjmuje zarówno zakodowane w sposób niekodowany i procentowe nawiasy kwadratowe jako prawidłowe znaki w ciągu zapytania, a nawet przypisuje im specjalny cel. Wygląda jednak na to, że autorzy, którzy próbują wykorzystać tę lukę przez procent kodowania nawiasów kwadratowych, naruszają RFC 3986.
Co to jest "wielowymiarowy" w tym? Czy też odnosisz się do vars-get, które są reprezentowane jako tablica w języku skryptowym po stronie serwera? – arkascha
@arkascha yep, mam na myśli ciąg zapytania podobny do tego '? A [b] [c] [d] [e] = f', skrypt po stronie serwera traktuje go jak tablicę wielowymiarową –