La risposta non è semplice.
Quanto segue viene estratto dalla sezione 3.2.2 della RFC 3986:
Un host identificato da un indirizzo letterale Internet Protocol versione 6
[RFC3513] o poi, si distingue per racchiudendo il IP letterale
all'interno di parentesi quadre ("[" e "] "). Questo è l'unico posto in cui i caratteri della parentesi quadra sono consentiti nella sintassi URI
.
Questo sembra di rispondere alla domanda da categoricamente affermando che le parentesi quadre non sono ammessi in nessun'altra parte del URI. Ma c'è una differenza tra un carattere di parentesi quadra e un carattere di parentesi quadra con codifica percentuale.
Il seguente è estratto da inizio sezione 3 della RFC 3986:
Componenti sintassi
La sintassi URI generico costituito da una sequenza gerarchica di
componenti denominati schema, autorizzazione, percorso, query e frammento
.
URI = schema ":" hier-part ["?" interrogazione] [frammento "#"]
Così il "query" è una componente della "URI".
Il seguente è estratto dalla sezione di 2,2 RFC 3986:
2,2. Caratteri riservati
Gli URI includono componenti e sottocomponenti che sono delimitati da
caratteri nel set "riservato". Questi personaggi sono chiamati
"riservato", perché può (o non può) essere definito come delimitatori dal
la sintassi generica, da ogni sintassi specifica-schema, o dal
sintassi specifica implementazione di algoritmi dereferencing di un URI.
Se i dati per un componente URI sono in conflitto con uno scopo riservato del carattere come delimitatore, i dati in conflitto devono essere
codificati in percentuale prima della creazione dell'URI.
reserved = gen-delims/sub-delims
gen-delims = ":"/"/"/"?"/"#"/"["/"]"/"@"
sub-delims = "!"/"$"/"&"/"'"/"("/")"
/"*"/"+"/","/";"/"="
parentesi Così quadrati possono essere visualizzati in una stringa di query, ma solo se sono codificati per cento. A meno che non lo sono, per essere spiegati più in basso nella sezione 2.2:
URI applicazioni che producono dovrebbero ottetti di dati per cento-codificare che
corrispondono ai caratteri nel set riservato a meno che questi personaggi
sono specificatamente ammessi dal Schema URI per rappresentare i dati nel componente .Se un carattere riservato si trova in un componente URI e ruolo
senza delimitazione è noto per quel carattere, allora deve essere
interpretato come rappresentante l'ottetto di dati corrispondente a codifica
personaggio in US-ASCII.
Quindi, perché le parentesi quadre sono ammessi solo nel sottocomponente "host", "dovrebbero" essere per cento codificati in altri componenti e sottocomponenti, e in questo caso nel componente "query", a meno che RFC 3986 consente in modo esplicito non codificato parentesi quadre per rappresentare i dati nel componente di query, che non è.
Tuttavia, se una "Applicazione di produzione di URI" non riesce a fare ciò che "dovrebbe" fare, lasciando parentesi quadre non codificate nella query, i lettori dell'URI non devono rifiutare l'URI a titolo definitivo. Invece, le parentesi quadre devono essere considerate come appartenenti ai dati del componente di query, poiché non vengono utilizzati come delimitatori in quel componente.
Questo è il motivo per cui, ad esempio, non è una violazione di RFC 3986 quando PHP accetta parentesi quadre codificate non codificate e per cento come caratteri validi in una stringa di query e persino assegna loro uno scopo speciale. Tuttavia, sembrerebbe che gli autori che cercano di trarre vantaggio da questa scappatoia non codificando per cento le parentesi quadre sono in violazione di RFC 3986.
Che cosa è "multidimensionale" in questo? O ti stai riferendo al fatto che le vars sono rappresentate come una matrice in un linguaggio di scripting lato server? – arkascha
@arkascha sì, intendo una stringa di query come questa '? A [b] [c] [d] [e] = f', lo script lato server lo tratta come un array multidimensionale –