2010-02-08 6 views
5

Ci siamo imbattuti in una strana discussione dove lavoro, e potrei sbagliarmi su questo, quindi è per questo che sto chiedendo.Codifica URL con caratteri di sottolineatura in un nome di directory?

Il nostro software restituisce una directory a un server Apache che sostituisce un trattino di sottolineatura con% 5F nel nome della directory.

Ad esempio se il nome della directory fosse elencato come una stringa nel nostro software sarebbe: "andy_test", ma quando il software invia la directory al server Apache, diventerebbe "andy% 5Ftest". Sfortunatamente, quando si accede all'url sul server finisce per diventare "andy% 255Ftest".

qualche modo questo sembra sbagliato per me, ancora una volta, la progressione è:

  1. andy_test < - (come una stringa nel software)
  2. Andy% 5Ftest < - (indicato come una directory sul server)
  3. Andy% 255Ftest < -. (deve essere utilizzato quando si chiama la stessa directory come un URL sul server da un browser web)

sono assum che "% 5" sta codificando per underscore, e che "% 25" sta codificando per "%".

Ora mi sembra che il modo in cui il nome della directory dovrebbe essere elencato sul server sarebbe semplicemente andy_test e se si stesse usando un URI codificato allora si finirebbe con "andy% 5Ftest" per accedere alla directory sul server Apache.

Ho chiesto ai ragazzi sul backend su di esso, e hanno detto che erano solo: "codifica tutto ciò che non era una lettera o un numero

Quindi credo di essere un po 'confuso su questo.. mi puoi dire chi ha ragione, e mi ha diretto a alcune informazioni sul perché

risposta

9

Non è necessario codificare i nomi delle directory durante la creazione (come suggerito). La codifica dovrebbe avvenire solo nell'ultima fase in cui viene distribuita al browser. Ecco perché si finisce con la codifica 'double':% 25 è% e 5F è il residuo della prima codifica del trattino basso.

BTW, non è necessario codificare il carattere di sottolineatura in ogni caso (penso in base allo rfc1738).

2.2.URL Carattere problemi di codifica

...

Così, solo caratteri alfanumerici, i caratteri speciali "$ -_. + * '()," E caratteri riservati utilizzati per i loro scopi riservati possono essere utilizzati non codificato all'interno di un URL.

+1

Grazie anche per il riferimento RFC! – leeand00

3

C'è doppia codifica accadendo in quello che si sta mostrando due passi dovrebbero essere abbastanza:?.

andy_test è sia la stringa nel software e il nome effettivo della directory o dello script nel filesystem (la risorsa a cui accede il server web)

andy%5Ftest è andy_test URL codificato. Questa stringa dovrebbe essere utilizzata dal browser (non è realmente necessaria nel caso del trattino basso, ma potrebbe essere in altri casi).

andy%255ftest è solo andy_test URL codificato due volte, il che non ha senso, non ci dovrebbe essere bisogno di. Decidi semplicemente dove farai la codifica. Se lo fai sia a livello di codice che a livello di server web, questo è ciò che può accadere e il risultato sono collegamenti non funzionanti, a meno che non decifri nuovamente due volte, il che non è realmente necessario né ragionevole.

+0

Non ho scritto il backend per il software, sto solo cercando di convincere i ragazzi del backend che qualcosa è stato fatto male. – leeand00

+0

@ leeand00: Dovrebbe essere ovvio che avere una cosa fatta due volte è sbagliato. L'obiettivo dovrebbe essere quello di determinare dove è il posto migliore per fare la codifica e farlo solo lì (non due volte). –

Problemi correlati