2013-06-21 33 views
5

Tworzę link, który tworzy parametry URL zawierające linki z parametrami adresu URL. Problem jest, że mam link jak tenJak uniknąć kodowania adresu 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 

Ten link prowadzi do strony, na której dodawanie zakładek odczytuje te parametry.

auto jest pogodowymi, aby przeczytać następujące parametry lub nie

source jest gdzie pójść po zakończeniu dodawania lub anulowanie

url odnośnikiem zakładek

title jest nazwą zakładki

Wartości url i title zostają wprowadzone w 2 polach. Następnie użytkownik musi kliknąć save lub cancel. Problem polega na tym, że strona z zakładkami wpisuje wartości do pola, będzie je dekodować. Jeśli spróbujesz zapisać, nie pozwoli Ci to na zapisanie, ponieważ wartość pdfname w wartości url zawiera spację. Potrzebuje linku, aby nie mieć spacji. Tak więc, w zasadzie, chcę, aby po wprowadzeniu go na pole nadal będzie to %20 zamiast spacji.

Nie ma problemu z source, auto lub title, tylko url ...

Czy istnieje sposób, aby rozwiązać ten problem? Może jakaś specjalna postać ucieczki, którą mogę wykorzystać na potrzeby %20?

Uwaga: Nie mogę zmodyfikować strony zakładki.

Używam C#/asp.net, aby utworzyć łącze i przejść do niego.

Dzięki

Odpowiedz

0

Wystarczy użyć HttpUtilty na UrlEncode sposób tuż przed rękę od URL;

string encoded = HttpUtility.UrlEncode(url); 
8

Od .NET Framework 4.5 można użyć WebUtility.UrlEncode.

Znajduje się w System.dll, więc nie wymaga żadnych dodatkowych odniesień.

To właściwie ucieka znaków dla adresów URL, w przeciwieństwie Uri.EscapeUriString

Nie ma żadnych ograniczeń dotyczących długości łańcucha, w przeciwieństwie Uri.EscapeDataString, dzięki czemu może być stosowany do POST żąda

System.Net.WebUtility.UrlEncode(urlText) 

Inną opcją jest

System.Uri.EscapeDataString() 
+2

Próbowałem to http://msdn.microsoft.com/en-us/library/zttxte6w.aspx, ale to tylko kodującego go jak z '+', który nie działa, ponieważ strona zakładki, zdekodowana. Ale zrozumiałem, po prostu, "string.replace (" ","% 2520 ");'. W ten sposób strona zakładek odszyfrowuje '% 25' na'% ', co pozostawia tylko'% 20', co zadziałało. – omega

1

Uri.EscapeDataString() i Uri.UnescapeDataString() są bezpieczne w porównaniu do metod urlencode/urldecode i nie konwertuje znaków plus do spacji podczas dekodowania.

Niektóre dane od innego użytkownika: http://geekswithblogs.net/mikehuguet/archive/2009/08/16/134123.aspx

+1

Proszę wyjaśnij swoją odpowiedź. W tej chwili to, co powiedziałeś, jest subiektywne, ponieważ nie wyjaśniasz dlaczego. Dlaczego są bezpieczne ... proszę opracuj dla autora pytania. –

+1

W porównaniu do metod UrlEncode/UrlDecode, Uri.EscapeDataString/Uri.UnescapeDataString nie konwertuje znaków plus na spacje. (Edytowałem swój post, aby wyjaśnić odpowiedź) – mmosoll