2009-03-13 8 views

risposta

14

Se si tratta di nomi di file, una buona scelta potrebbe essere un carattere che non è consentito nei nomi dei file. I suggerimenti fino ad ora inclusi , | & che sono generalmente consentiti nei nomi di file e quindi potrebbero portare ad ambiguità. / d'altra parte non è generalmente consentito, nemmeno su Windows. È consentito negli URI e non ha alcun significato speciale nelle stringhe di query.

Esempio:

http://someSite/someApp/myUtil.ashx?files=file1.txt|file2.bmp|file3.doc è male perché può fare riferimento al file valido file1.txt|file2.bmp.

http://someSite/someApp/myUtil.ashx?files=file1.txt/file2.bmp/file3.doc si riferisce in modo inequivocabile a 3 file.

+6

Questa risposta è per lo più errata. Il | il carattere non è valido negli URL, secondo le specifiche ufficiali, e può causare vari problemi se si tenta di usarlo. Il carattere & è riservato nelle stringhe di query per separare le coppie nome/valore. La virgola può essere una scelta OK, ma sono necessarie ulteriori ricerche. –

+0

è pericoloso assumere | non è consentito nei nomi dei file. Linux consente qualsiasi carattere nei nomi dei file. ma in Windows, sì, ci sono una manciata di esclusioni specifiche, che includono |. –

+4

@DougS: Sto spiegando perché '|' è una cattiva scelta per quanto riguarda i nomi dei file. Potrebbe anche essere una cattiva scelta in URL, non sto nemmeno facendo un reclamo a riguardo. Quindi, come fa a rendere la mia risposta errata? – MSalters

-1

Penso che prenderei in considerazione l'uso di virgole o punti e virgola.

+2

La virgola è un sostituto valido per &, quindi non è una buona scelta: "La serie di coppie è separata dalla e commerciale, '&' o punto e virgola, ';'." (http://en.wikipedia.org/wiki/Query_string#Structure) – dwynne

4

Ho sempre usato i doppi tubi "||". Non ho alcuna prova valida per fare il backup del motivo per cui questa è una buona scelta oltre a 10 anni di programmazione web e non è mai stato un problema.

5

Consiglierei di effettuare ogni file il proprio parametro di query, vale a dire

myUtil.ashx?file1=file1.txt&file2=file2.bmp&file3=file3.doc 

In questo modo si può semplicemente utilizzare l'analisi di query standard e ciclo

+0

+1 modo standard di fare più valori – bobince

6

Avete bisogno di elencare i nomi dei file come una stringa? maggior parte dei linguaggi accetta array nella querystring modo si potrebbe scrivere le cose come

http://someSite/someApp/myUtil.ashx?files[]=file1.txt&files[]=file2.bmp&files[]=file3.doc 

Se non lo fa, o non si può utilizzare per qualche altro motivo, si dovrebbero usare per un delimitatore che viene o non consentito o insolito in un nome di file. Pipe (|) è buono, altrimenti potresti urlencode un personaggio invisibile dato che sono abbastanza facili da usare nella codifica, ma più difficile da includere in realtà in un nome di file.

Io di solito uso gli array quando possibile e il tubo altrimenti.

+0

è pericoloso assumere | non è consentito nei nomi dei file. Linux consente qualsiasi carattere nei nomi dei file. ma in Windows, sì, ci sono una manciata di esclusioni specifiche, che includono |. –

0

vorrei costruire il MSalters rispondono dicendo, generalizzare, il migliore delimitatore è uno che non è valido per le voci nell'elenco. Ad esempio, se la tua lista è prezzi, una virgola è un delimitatore errato perché può essere confuso con i valori. Per questo motivo, come suggeriscono la maggior parte di queste risposte, penso che un buon delimitatore generale sia probabilmente "|" come raramente è un valore valido. "/" non è forse il miglior delimitatore in generale poiché a volte è valido per i percorsi.

19

Avere Parametri query più volte è legale, e l'unico modo per garantire senza problemi di analisi in tutti i casi:

http://someSite/someApp/myUtil.ashx?file=file1.txt&file=file2.bmp&file=file3.doc 

Il punto e virgola ; deve essere URI codificato se parte di un nome di file (rivolto a %3B), ancora non se separa i parametri di query che è il suo uso riservato.

Vedere la sezione 2.2 di :

2.2. Caratteri riservati

Molti URI includono componenti costituiti da o delimitati da determinati caratteri speciali. Questi caratteri sono chiamati "riservati", poiché il loro uso all'interno del componente URI è limitato al loro scopo riservato. Se i dati di un componente URI sono in conflitto con lo scopo riservato, i dati in conflitto devono essere preceduti da escape prima di formare l'URI.

reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," 
+0

La tua risposta sembra avere due parti. Potresti chiarire? – Sean

1

Questo è un problema comune. Il modo in cui l'ho gestito è stato: ho creato un metodo che accettava un elenco di stringhe, quindi ho trovato un personaggio che non si trovava in nessuna delle stringhe. (L'ho fatto con una semplice concatenazione delle stringhe, quindi testando vari caratteri.) Una volta che un personaggio è stato trovato, ha concatenato tutte le stringhe insieme, ma ha anche anteposto la stringa al carattere di separazione. Quindi, in una determinata domanda, un esempio wud essere: http://someSite/someApp/myUtil.ashx?files=|file1.txt|file2.bmp|file3.doc e un altro wud essere: http://someSite/someApp/myUtil.ashx?files=,file1.txt,file2.bmp,file3.doc ma dato che in realtà uso un metodo che garantisce il mio carattere di separazione non è nel resto delle stringhe, è sicuro. Era un po 'di lavoro da creare per la prima volta, ma l'ho usato molte volte in varie applicazioni.

+0

sembra interessante parlare di postare il codice qui? – chrisinmtown

Problemi correlati