2013-06-21 8 views
5

Sto creando un collegamento che crea parametri URL che contengono collegamenti con parametri URL. Il problema è che ho un link come questoCome uscire dalla codifica url?

http://mydomain/_layouts/test/MyLinksEdit.aspx?auto=true&source= 
    http://vtss-sp2010hh:8088/AdminReports/helloworld.aspx?pdfid=193 
&url=http://vtss-sp2010hh:8088/AdminReports/helloworld.aspx?pdfid=193%26pdfname=5.6%20Upgrade 
&title=5.6 Upgrade 

Questo collegamento va ad una pagina aggiungendo segnalibro dove si legge questi parametri.

auto è wheather per leggere i seguenti parametri o no

source è dove andare dopo aver finito di aggiungere o cancellare

url è il link del segnalibro

title è il nome del segnalibro

I valori di url e title vengono immessi in 2 campi. Quindi l'utente deve fare clic su save o cancel. Il problema è quando la pagina del segnalibro inserisce i valori nel campo, li decodificherà. Quindi se si tenta di salvare, non sarà possibile salvarlo perché il valore pdfname nel valore url ha uno spazio al suo interno. Ha bisogno del link per non avere spazi. Quindi, in pratica, lo voglio in modo che dopo averlo inserito nel campo, sarà ancora un %20 invece di uno spazio.

Non c'è un problema con source, auto o title, solo il url ...

C'è un modo per risolvere questo? Come forse un personaggio di fuga speciale che posso usare per lo %20?

Nota: non riesco a modificare la pagina dei segnalibri.

Sto usando C#/asp.net per creare il collegamento e andare ad esso.

Grazie

risposta

0

Basta usare il metodo di UrlEncode HttpUtilty a destra prima la mano fuori l'url;

string encoded = HttpUtility.UrlEncode(url); 
8

Dal .NET Framework 4.5 è possibile utilizzare WebUtility.UrlEncode.

Risiede in System.dll, quindi non richiede riferimenti aggiuntivi.

Sfugge correttamente caratteri per gli URL, a differenza Uri.EscapeUriString

Essa non ha limiti alla lunghezza della stringa, a differenza Uri.EscapeDataString, in modo che possa essere utilizzato per inviare delle richieste verso

System.Net.WebUtility.UrlEncode(urlText) 

Un'altra opzione è

System.Uri.EscapeDataString() 
+2

ho provato questo http://msdn.microsoft.com/en-us/library/zttxte6w.aspx, ma semplicemente la codifica come con un '+', che non ha funzionato, perché la pagina segnalibro, decodificato. Ma l'ho capito, l'ho appena fatto, 'string.replace (" ","% 2520 ");'. In questo modo la pagina dei segnalibri decodifica '% 25' in un'% ', lasciando solo'% 20' a sinistra che è ciò che ha funzionato. – omega

1

Uri.EscapeDataString() e Uri.UnescapeDataString() sono sicuri confronto a metodi/urldecode UrlEncode e non converte più caratteri in spazi durante la decodifica.

Alcuni dettagli da un altro utente: http://geekswithblogs.net/mikehuguet/archive/2009/08/16/134123.aspx

+1

Spiega la tua risposta. Al momento quello che hai detto è soggettivo perché non spieghi perché. Perché sono al sicuro ... per favore scrivi la domanda all'autore. –

+1

Confronto con i metodi UrlEncode/UrlDecode, Uri.EscapeDataString/Uri.UnescapeDataString non converte più caratteri in spazi. (Ho modificato il mio post per chiarire la risposta) – mmosoll