2010-01-22 3 views
6

Mi piacerebbe usare -[NSURL parameterString] per analizzare i parametri di un URL che ho passato. Dice che l'URL deve essere conforme allo RFC 1808 ma ora chiedersi se il nostro lo fa?!? Usiamo qualcosa di simile:Parametri di NSURL confusione della trama con l'uso di ';' vs '&'

http://server/path/query?property1=value1&property2=value2

ma RFC 1808 non cita mai la e commerciale (&) come separatore parametro valido (almeno il modo in cui l'ho letto). Suggerisce il punto e virgola (;). Forse perché è stato redatto nel 1995? Il & ha sostituito lo ;? Se è così, chiunque verifica se anche il parametro Parametri di NSURL analizzerà come delimitatore &?

Qual è il modo "giusto" prima di scavare una grande buca?

risposta

8

Secondo RFC 1808 (. 2.1 URL sintattica Componenti) sintassi corretta è la seguente:

<scheme>://<net_loc>/<path>;<params>?<query>#<fragment> 

Dice informazioni query viene formattato ai sensi dell'articolo 3.3 del RFC 1738, che ci dice:

" All'interno del percorso e dei componenti searchpart, "/", ";", "?" Sono riservati. "

Per me quanto sopra dice che nel vostro URL del percorso (al CGI) è:

http://server/path/query 

e la query è:

property1=value1&property2=value2 

che non contiene alcun carattere riservato. Quindi stai bene.Infatti l'uso della "&" come separatore nella stringa di query qui deriva dal CGI specification e non RFC URL:

"dati di forma è un flusso di coppie nome = valore separate dal carattere &."

+0

molto utile ... grazie! difficile da ** cercare ** per questa roba sul Web perché ogni dannato "URL" colpisce "in un modo o nell'altro. – Meltemi

2

RFC1808 non definisce il formato interno della stringa di query. Credo che la roba del punto e virgola 1808 di cui parliamo sia un'informazione aggiuntiva di un tipo diverso (sui percorsi), che in pratica non è mai stata utilizzata. Per quanto posso vedere, l'interfaccia NSURL non include alcun metodo che si occupi di analizzare/suddividere il contenuto della stringa di query stessa, quindi questo non è di interesse per la classe, e infatti l'URL è conforme al 1808.

In realtà le stringhe di query non hanno intrinsecamente alcun formato definito da RFC; si può perfettamente mettere qualsiasi stringa in loro e recuperarli intatti sul lato server. Tuttavia, lo standard HTML descrive un modo per creare stringhe di query dal contenuto del modulo e questo formato application/x-www-form-urlencoded viene utilizzato dalla maggior parte degli script sul lato server.

Secondo HTML4 sezione 17.13.4.1, & è il browser di separazione parametro must uso per creare stringhe delle query da molteplici parametri, quindi sì, è necessario sostenere la e commerciale come separatore di parametri. HTML4 consiglia agli script sul lato server di di accettare il punto e virgola come separatore alternativo alla e commerciale nelle stringhe di query, in modo da evitare ulteriori fughe di dati. Ma non lo richiede, e in effetti (sfortunatamente) molti ambienti server/lettura di moduli non accettano il punto e virgola per questo scopo.