2013-02-06 10 views
10

Vedo che il filtro di Django urlencode non codifica barra di default:Perché il `urlencode` di Django non codifica la barra?

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#urlencode

so che posso farlo codificare lo slash, ma perché non fa fare di default? Non è accettato il comportamento di codificare la barra, dato che è un carattere riservato negli URL?

+0

Vediamo alcuni casi d'uso! –

+1

Leggi questo http://stackoverflow.com/questions/1957115/is-a-slash-equivalent-to-an-encoded-slash-2f-in-the-path-portion-of-a – catherine

risposta

7

Dalla sorgente Django, urlencode è fondamentalmente un involucro attorno al metodo di utilità urlquote di Django. Dai commenti nella fonte, urlquote è una versione UTF-8-safe di urllib.quote.

Così urlencode utilizza lo stesso default come pitone di urllib.quote, e il motivo che urllib.quote non sfugge barre può essere trovato nel documentation:

Sostituire i caratteri speciali nella stringa utilizzando la fuga% xx. Le lettere, cifre e i caratteri "_.-" non vengono mai citati. Per impostazione predefinita, questa funzione è intesa per la citazione della sezione percorso dell'URL. Il parametro di sicurezza opzionale specifica caratteri aggiuntivi che non dovrebbero essere quotati - il suo valore predefinito è '/'.

Quindi, il motivo è che sta sfuggendo al percorso e '/' è un carattere perfettamente previsto e valido all'interno di un percorso.

Problemi correlati