2011-11-03 12 views
7

In un progetto recente, ho avuto il piacere di risolvere un bug che implicava il mancato caricamento delle immagini quando gli spazi erano nel nome file. Ho pensato "Che problema semplice, lo farò UrlEncode()!" Ma, NAY! Semplicemente usando UrlEncode() non è stato risolto il problema.In ASP.NET, perché c'è UrlEncode() AND UrlPathEncode()?

Il nuovo problema era il metodo HttpUtilities.UrlEncode() acceso spazi () per plusses (+) invece del %20 come il browser voleva. Quindi file+image+name.jpg restituirebbe non trovato mentre file%20image%20name.jpg è stato trovato correttamente.

Per fortuna, un collega ha indicato HttpUtilities.UrlPathEncode() per me che utilizza %20 per gli spazi anziché +.

PERCHÉ esistono due modi per gestire la codifica Url? PERCHÉ ci sono due comandi che si comportano in modo così diverso?

+0

Vedere http://stackoverflow.com/questions/602642/server-urlencode-vs-httputility-urlencode/603962#603962 per una soluzione migliore di entrambi. –

+0

Possibile duplicato: http://stackoverflow.com/q/4145823/2291 –

+0

@Mufasa - mmm ... Conosco la differenza. Mi sto chiedendo perché. – quakkels

risposta

9

UrlEncode è utile per l'uso con un QueryString come browser tendono ad utilizzare un + qui in luogo di uno spazio quando invio di moduli con il metodo GET.

UrlPathEncode sostituisce semplicemente tutti i caratteri che non possono essere utilizzati all'interno di un URL, come ad esempio <, > e .

Entrambi i collegamenti MSDN includono questa citazione:

è possibile codificare un URL utilizzando il metodo UrlEncode o il metodo UrlPathEncode. Tuttavia, i metodi restituiscono risultati diversi. Il metodo UrlEncode converte ciascun carattere di spazio in un carattere più (+). Il metodo UrlPathEncode converte ogni carattere di spazio nella stringa "% 20", che rappresenta uno spazio in notazione esadecimale. Utilizzare il metodo UrlPathEncode quando si codifica la porzione di percorso di un URL nell'ordine per garantire un URL decodificato coerente, indipendentemente da quale piattaforma o browser esegua la decodifica.

+1

Microsoft ha dichiarato che 'UrlPathEncode()' non deve essere usato. È un metodo di supporto utilizzato per garantire la compatibilità del browser. Vedi il tuo link UrlPathEncode per i dettagli. – Basic

+0

Non è stato possibile utilizzare UrlEncode per codificare parti del percorso, poiché il segno + non è consentito lì. Vedi spiegazione: https://stackoverflow.com/a/29948396/991267 Il metodo System.Uri.EscapeDataString può essere utilizzato per codificare le parti del percorso. –

2

Quindi in un URL si ha il percorso e poi un? e quindi i parametri (ad esempio http://some_path/page.aspx?parameters). I percorsi URL codificano gli spazi in modo diverso rispetto ai parametri dell'URL, ecco perché ci sono le due versioni. Per molto tempo gli spazi non erano validi in un URL, ma erano nei parametri.

In altre parole, l'url di formattazione è cambiato nel tempo. Per molto tempo solo i caratteri ANSI potrebbero essere inclusi in un URL.

Problemi correlati