2012-03-25 10 views
6

I seguenti URL devono essere considerati funzionalmente equivalenti?Parametri stringa di query URI vuoti: "a = & b =" rispetto a "a & b"

http://example.com/foo?a=&b= 

http://example.com/foo?a&b 

Ciò avvenne quando un utente di un modulo Drupal che ho scritto, che analizza a parte e poi riscrive URI noticed che il codice a volte causa le parti della stringa di query per cambiare in modo inaspettato a causa di come alcune delle funzioni PHP sottostanti comportarsi. Ad esempio:

parse_str("a&b", $values); print http_build_query($values); 

a=&b= 

È qualcosa su cui dovrei preoccuparmi?

Modifica si ferma in modo SO lamentano del fatto che questa domanda è simile ad un altro: La domanda è se è lecito ritenere che "nessun valore per X" e "valore vuoto per X" sono equivalenti, non è se il "nessun valore" lo stile è sintatticamente corretto (che è).

+0

come un parere, sì, questo è qualcosa che dovresti preoccuparti visto che prima o poi si interromperanno in modi misteriosi che possono essere difficili da debugare, a seconda di come prevedi di consumare i parametri di una e b query. Se saranno vuoti/nulli, perché generarli in primo luogo? un approccio migliore potrebbe essere che lo script del server verifichi l'esistenza di questi parametri. –

+0

Non ho davvero il controllo su cosa faranno i server collegati. Fondamentalmente spero solo che ci sia uno standard codificato là fuori che non riesco a trovare qualcuno a cui possa indirizzarmi o, in mancanza, solo un metodo di implementazione ampiamente coerente. Se non riesco a trovarlo, allora dovrei iniziare a preoccuparmi ea reinventare le ruote. –

+0

Possibile duplicato di [È un parametro di query url valido se non ha alcun valore?] (Https://stackoverflow.com/questions/4557387/is-a-url-query-parameter-valid-if-it-has-no -valore) –

risposta

1

RFC 3986 Uniform Resource Identifier (URI): Generic Syntax non ha nulla da dire sulla struttura della stringa di query a parte il modo in cui i caratteri come ? devono essere gestiti. Quindi, in senso stretto, i due URL di esempio sono diversi. Ovviamente, l'applicazione che riceve quelle stringhe di query può considerarle come funzionalmente equivalenti, ma questo non è qualcosa che è possibile determinare dall'URL da solo.

Problemi correlati