2015-09-09 14 views
6

Potrzebuję zakodować adres URL w zespole biblioteki klas, w którym nie chcę odwoływać się do System.Web. URL zawiera kilka spacjiJak wymusić% 20 zamiast + w System.Net.WebUtility.UrlEncode

https://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quote where symbol in ("YHOO","AAPL")&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback= 

Gdy używam System.Net.WebUtility.UrlEncode() przestrzenie są zastąpione znakiem „+”, który nie działa. Potrzebuję ich zastąpić% 20

Jak mogę to osiągnąć bez odniesienia do System.Web?

+4

'" + ", który nie działa" Dlaczego nie? '+' i '% 20' powinny być interpretowane w ten sam sposób przez dowolny kod, który poprawnie interpretuje kodowanie URL. –

+0

http://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20, http://stackoverflow.com/questions/2678551/when-to-encode-space-to-plus -lub-20 – stuartd

+0

Język zapytań Yahoo Finance nie interpretuje "+" jako odpowiednika spacji (% 20). Próbowałem adresu URL ręcznie w obie strony, a za pomocą "+" nie działa. – ChrisP

Odpowiedz

1

Można po prostu to zrobić:

public static string MyUrlEncode(string value) 
{ 
    // Temporarily replace spaces with the literal -SPACE- 
    string url = value.Replace(" ", "-SPACE-"); 
    url = System.Net.WebUtility.UrlEncode(url); 

    // Some servers have issues with (and), but UrlEncode doesn't 
    // affect them, so we include those in the encoding as well. 
    return url.Replace("-SPACE-", "%20").Replace("(", "%28").Replace(")", "%29"); 
} 
11

można spróbować Uri.EscapeUriString z System montażu, który ucieka ciąg URI. W przypadku ciągu znaków z pytania zwraca:

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quote%20where%20%20symbol%20in%20(%22YHOO%22,%22AAPL%22)&format=json&diagnostics=true&env=store%253A%252F%252Fdatatables.org%252Falltableswithkeys&callback= 
Powiązane problemy