2013-06-21 17 views
5

Ich erstelle einen Link, der URL-Parameter erstellt, die Links mit URL-Parametern enthalten. Das Problem ist, dass ich einen Link wie diesWie URL-Codierung zu entkommen?

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 

Dieser Link zu einem Lesezeichen hinzugefügt Seite geht, wo es diese Parameter liest.

auto ist wheather die folgenden Parameter zu lesen oder nicht

source wird, wo nach

url ist die Verknüpfung mit Lesezeichen

title ist der Name des Lesezeichen hinzugefügt haben oder Stornierung gehen

Die Werte url und title werden in 2 Felder eingegeben. Dann muss der Benutzer auf save oder cancel klicken. Das Problem ist, wenn die Lesezeichen-Seite die Werte in das Feld eingibt, wird es sie decodieren. Wenn Sie dann versuchen, zu speichern, werden Sie nicht speichern, da der pdfname Wert in url Wert ein Leerzeichen enthält. Es benötigt den Link, um keine Leerzeichen zu haben. Also im Grunde will ich es so, dass es nach dem Eintritt in das Feld immer noch ein statt eines Platzes ist.

Es gibt kein Problem mit source, auto oder title, nur die url ...

Gibt es eine Möglichkeit, dies zu lösen? Wie vielleicht ein spezieller Escape-Charakter, den ich für die verwenden kann?

Hinweis: Ich kann die Lesezeichen-Seite nicht ändern.

Ich verwende C#/asp.net, um den Link zu erstellen und zu ihm zu gehen.

Dank

Antwort

0

Verwenden Sie einfach UrlEncode Methode des HttpUtilty rechts, bevor Sie die URL von Hand aus;

8

Seit .NET Framework 4.5 können Sie WebUtility.UrlEncode verwenden.

Es befindet sich in System.dll, so dass keine zusätzlichen Referenzen erforderlich sind.

Es richtig Zeichen für URLs entkommt, im Gegensatz zu Uri.EscapeUriString

Es keine Grenzen hat von der Länge der Saite, im Gegensatz zu Uri.EscapeDataString, so dass es für POST verwendet werden kann, fordert

System.Net.WebUtility.UrlEncode(urlText) 

Eine weitere Option

ist
System.Uri.EscapeDataString() 
+2

habe ich versucht, diese http://msdn.microsoft.com/en-us/library/zttxte6w.aspx, aber es es wie kodiert mit einem '+', die hat nicht funktioniert, weil die Bookmarkseite es entschlüsselt hat. Aber ich fand es heraus, ich tat es einfach, 'string.replace (" ","% 2520 ");'. Auf diese Weise decodiert die Bookmarkseite '% 25' in ein'% ', was nur'% 20' übrig lässt, was funktioniert. – omega

1

Uri.EscapeDataString() und Uri.UnescapeDataString() sind sicher zu UrlEncode/urldecode Methoden zu vergleichen und konvertiert beim Dekodieren keine Pluszeichen in Leerzeichen.

Einige Details von einem anderen Benutzer: http://geekswithblogs.net/mikehuguet/archive/2009/08/16/134123.aspx

+1

Bitte erläutern Sie Ihre Antwort. Im Moment ist das, was Sie gesagt haben, subjektiv, weil Sie nicht erklären warum. Warum sind sie sicher ... bitte erkläre für den Autor der Frage. –

+1

Im Vergleich zu UrlEncode/UrlDecode-Methoden konvertiert Uri.EscapeDataString/Uri.UnescapeDataString Pluszeichen nicht in Leerzeichen. (Ich habe meinen Beitrag bearbeitet, um die Antwort zu klären) – mmosoll