2012-01-12 8 views
22

Quando il debug in ASP.NET MVC, non vedo una differenza tra:Perché l'URL della virgola è codificato?

http://mysite.com?q=hi,bye 

e

http://mysite.com?q=hi%2Cbye 

querystring param "q" è sempre un valore "hi, bye" .

Quindi perché la virgola è codificata?

Voglio fare qualcosa del genere https://stackoverflow.com/a/752109/173957.

ho questo modulo:

<form method="GET" action="/Search"> 
    <input type="hidden" name="q" value="hi,bye"/> 
    <input type="submit" value="ok"/> 
</form> 

Come posso evitare che questo valore venga codificato?

+3

* Perché * vuoi impedire che venga codificato? ASP.NET la decodificherà automaticamente per te, quindi qual è il problema? – Jon

+2

Immagino che? Q = ciao, ciao è un po 'più leggibile di? Q = hi% 2Cbye. Inoltre, sono per lo più solo curioso. –

+0

Anni fa, ho usato esplicitamente una virgola nel mio valore di stringa di query per il motivo _specific_ che era _not codificato_ e quindi facilmente leggibile nella barra degli indirizzi. Peccato che alcune librerie/browser ora lo codifichino. –

risposta

16

La specifica URI, RFC 3986, specifica che i componenti del percorso URI non contengono caratteri riservati non codificati e la virgola è uno dei caratteri riservati. Per le sottodimensioni , ad esempio la virgola, lasciandola non codificata rischia il carattere da trattare come sintassi del separatore nello schema URI. La codifica percentuale garantisce che il carattere venga passato come dati.

+23

Nella domanda, la virgola non si trova nel componente del percorso URI, ma nel componente di query URI, che, in base a RFC 3986, può contenere sub-delimitazioni, che includono la virgola. –

+0

Se sto leggendo correttamente la specifica: 'percorso = percorso-assoluto' =>' percorso-assoluto = "/" [segmento-nz * ("/" segmento)] '=>' segmento = * pchar' => ' pchar = non riservato/pct-encoded/sub-delims/":"/"@" = = 'sub-delims ="! "/"$"/"&"/"'"/"("/")"/"*"/"+"/","/";"/"=" '. Quindi una virgola è valida in un segmento URI, query o frammento. – joeyhoer

2

Questo dipende molto dal browser. Il browser acquisisce il modulo HTML e decide come creare l'URL in base agli input del modulo.

Se si sta utilizzando un browser molto vecchio (o mal programmato), potrebbe non codificare la virgola. Se rispetti gli standard RFC, dovrebbe essere codificato.

Se si desidera impedire la codifica della virgola per tutti i browser, è necessario utilizzare JavaScript e creare l'URL autonomamente.

<script lang="JavaScript"> 
    document.location.href = "/Search?q=hi,bye"; 
</script> 

In ogni caso, non dovrebbe importare, perché si dovrebbe essere la decodifica dei parametri querystring in ogni caso, e il risultato sarà lo stesso.

+0

Sì, l'utilizzo di js ne consentirà sicuramente uno per impedire la codifica dei parametri della query. –

-1

ci sono diversi caratteri che hanno un significato speciale (come +? # Etc) o non sono ammessi direttamente (come spazio, virgola ecc.) In un URL. per utilizzare tali caratteri in un URL, è necessario codificarli e decodificarli. Read more Here

ASP.NET codifica e decodifica automaticamente tutti i caratteri richiesti come questo, quindi non è necessario preoccuparsene.

+1

Ma in realtà non ha senso che la virgola sia codificata. Anche nel link fornito, la virgola non è menzionata come carattere illegale. Anche nella parte del collegamento che hai fornito, "Ciao, ciao" non è diverso dopo averlo codificato. –

+2

La virgola ha un significato speciale negli URL, perché denota i parametri del segmento. Vedere [questo] (http://en.wikipedia.org/wiki/URI_scheme#Official_IANA-registered_schemes) link. Ricerca di schemi di dati, geo e ldap –

7

ho trovato questo elenco di caratteri che non richiedono codifica URL: http://web.archive.org/web/20131212154213/http://urldecoderonline.com/url-allowed-characters.htm

Aggiornamento
Dal momento che il link originale è rotto, ho usato archivio.org per ottenere il seguente testo dalla pagina dall'alto dicembre 2013

Lista dei caratteri URL consentiti

non numerata - possono essere codificati, ma non è necessario

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
a b c d e f g h i j k l m n o p q r s t u v w x y z 
0 1 2 3 4 5 6 7 8 9 - _ . ~ 

Riservato - A volte devono essere codificati

! * ' () ; : @ & = + $ ,/? % # [ ] 
+2

Sembra non funzionare più, la pagina è stata sostituita dal sito di annunci. –

Problemi correlati