This is probably very simple, but I simply cannot find the answer myself :(
Basicaly, what I want is, given this string:
"http://www.google.com/search?hl=en&q=c# objects"
I want this output:
http://www.google.com/search?hl=en&q=c%23+objects
I'm sure there's some helper class somewhere buried in the Framework that takes care of that for me, but I'm having trouble finding it.
EDIT: I should add, that this is for a Winforms App.
URL encoding replaces unsafe ASCII characters with a "%" followed by two hexadecimal digits. URLs cannot contain spaces. URL encoding normally replaces a space with a plus (+) sign or with %20.
However, if you reference objects or content store locations in your URL commands, you must replace illegal characters with their hexadecimal code equivalents, preceded by a percent sign. This is known as URL encoding.
There are only certain characters that are allowed in the URL string, alphabetic characters, numerals, and a few characters ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # that can have special meanings.
HttpServerUtility.UrlEncode(string)
Should sort out any troublesome characters
To use it you'll need to add a reference to System.Web (Project Explorer > References > Add reference > System.Web)
Once you've done that you can use it to encode any items you wish to add to the querystring:
System.Web.HttpUtility.UrlEncode("c# objects");
If you don't want a dependency on System.Web here is an implementation of "UrlEncode" I have in my C# OAuth Library (which requires a correct implementation - namely spaces should be encoded using percent encoding rather the "+" for spaces etc.)
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();
}
For reference http://en.wikipedia.org/wiki/Percent-encoding
@Wilfred Knievel has the accepted answer, but you could also use Uri.EscapeUriString()
if you wanted to avoid the dependency on the System.Web
namespace.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With