2009-02-10 18 views
15

Jest to prawdopodobnie bardzo proste, ale ja po prostu nie może znaleźć odpowiedź samodzielnie :(Jak zamienić znaki specjalne w adresie URL?

basicaly, czego chcę jest, biorąc pod uwagę ten ciąg:

http://www.google.com/search?hl=en&q=c# obiekty”

chcę tego wyjścia:

http://www.google.com/search?hl=en&q=c%23+objects

Jestem pewien, że niektóre klasy pomocnika gdzieś zakopane w ramy, które troszczy się o to dla mnie, ale jestem ha kłopoty ze znalezieniem go.

EDYCJA: Powinienem dodać, że jest to dla aplikacji WinForm.

+0

Coś wydaje się tutaj. Gdzie otrzymujesz URL bez utraty wartości zapytania? Jeśli tworzysz adres URL sam, powinieneś wychodzić z wartości zapytania ("en" i "C# objects"), ** następnie ** łącząc je z adresem URL. – DLJessup

Odpowiedz

13

HttpServerUtility.UrlEncode(string)

Należy uporządkować żadnych kłopotliwych znaków

Aby z niej skorzystać trzeba dodać odwołanie do system.Web (Projekt Explorer> Referencje> Dodaj odniesienie> System.Web)

Gdy już to zrobisz, możesz używać go do zakodowania wszelkie elementy, które chcesz dodać do kwerendy:

System.Web.HttpUtility.UrlEncode("c# objects"); 
+0

Dang 58 sekund za wolno, czas na przebicie Mavis Beacon! ;-) –

+0

Hmm nie wiedziałem o tym. :) – Dacto

+0

Dzięki Wilfred..Nie też o tym nie piszę :) – Shoban

9

@Wilfred Knievel ma zaakceptowane odpowiedź, ale można też użyć Uri.EscapeUriString() jeśli chciał uniknąć uzależnienia od nazw System.Web.

+0

najlepsze rozwiązanie, jeśli używasz tylko klienta .net. – dmihailescu

+0

Ta opcja jest świetna do kodowania znaków specjalnych, takich jak akcenty i nie wszystko, jak ukośniki lub dwukropki. – Andrew

10

Jeśli nie chcesz zależności od System.Web, tutaj jest implementacja "UrlEncode", którą mam w mojej bibliotece C# OAuth (która wymaga poprawnej implementacji - a mianowicie spacje powinny być zakodowane przy użyciu kodowania procentowego raczej "+ "dla pomieszczeń itp)

private readonly static string reservedCharacters = "!*'();:@&=+$,/?%#[]"; 

public static string UrlEncode(string value) 
{ 
    if (String.IsNullOrEmpty(value)) 
     return String.Empty; 

    var sb = new StringBuilder(); 

    foreach (char @char in value) 
    { 
     if (reservedCharacters.IndexOf(@char) == -1) 
      sb.Append(@char); 
     else 
      sb.AppendFormat("%{0:X2}", (int)@char); 
    } 
    return sb.ToString(); 
} 

odsyłającym http://en.wikipedia.org/wiki/Percent-encoding

+0

Dobrze! W przeciwieństwie do metod w System.Web koduje to również znaki specjalne. (Musiał dodać "-" do listy zastrzeżonych znaków) – Grastveit

+0

A co ze spacjami? Nie zostały zakodowane do% 20, tak jak powinny. – pstarkov