2012-04-03 14 views
13

In una stringa di parametri GET o in una richiesta POST "x-www-form-urlencoded", è possibile specificare una matrice di parametri denominandoli con parentesi (ad esempio "nome []").Come si esegue il POST di un array con codifica multipart/form-data?

Esiste un modo "corretto" (o almeno una convenzione estesa) per specificare una serie di parametri con una richiesta POST "multipart/form-data"?

Il seguente messaggio è corretto?

Content-Type: multipart/form-data; boundary=--abc 

--abc 
Content-Disposition: form-data; name="name[]" 

first index 
--abc 
Content-Disposition: form-data; name="name[]" 

second index 

Se varia a seconda della piattaforma, mi interessa la convenzione per Apache/PHP.

risposta

15

Se si desidera una matrice associata si può passare indice in un nome di un campo di modulo:

Content-Type: multipart/form-data; boundary=--abc 

--abc 
Content-Disposition: form-data; name="name[first]" 

first value 
--abc 
Content-Disposition: form-data; name="name[second]" 

second value 

Poi il php livello print_r ($ _ POST) darebbe

Array ([name] => Array ([first] => 'first value', [second] => 'second value'))

Se si segue solo un normale array ordinato, allora come lo avete fatto:

Content-Type: multipart/form-data; boundary=--abc 

--abc 
Content-Disposition: form-data; name="name[]" 

first index 
--abc 
Content-Disposition: form-data; name="name[]" 

second index 

Poi a livello php print_r ($ _ POST) darebbe

Array ([name] => Array ([0] => 'first index', [1] => 'second index'))

Parametri con [] nel loro nome traducono in array su un lato server è una caratteristica specifica per PHP (http://www.php.net/manual/en/faq.html.php#faq.html.arrays).

Per quanto riguarda la codifica multipart è possibile trovare ulteriori nella RFC: http://www.ietf.org/rfc/rfc1867.txt

+1

Grazie Alexei. Ti capita di avere un riferimento a qualsiasi specifica o documentazione che lo definisce? Specificamente per quanto riguarda un POST multipart vs uno standard urlencoded? – DougW

+1

Ho aggiunto un paio di link alla risposta –

+0

Sono decisamente pignolo qui, ma voglio sottolineare che i documenti PHP menzionano solo questa convenzione per quanto riguarda i moduli Web che POST sempre tramite x-www- form-urlencoded. Sto * indovinando * che nel momento in cui le variabili POST vengono passate da Apache a PHP che non c'è distinzione tra i tipi di contenuto, ma in realtà non ho letto nulla che lo confermi. E ci sono sicuramente molte supposizioni apparentemente sicure su PHP che risultano essere disastrosamente scorrette. Mi assicurerò di verificarlo. – DougW