rumi
rumi

Reputation: 3298

How to URL encode strings in C#

How can we encode a string using the URL (RFC 1738) standard in C#?

The following online tool is converting the strings using this standard http://www.freeformatter.com/url-encoder.html

An example of the string I want to convert is test(brackets) and the encoded string should look like:

test%28brackets%29

Upvotes: 16

Views: 64328

Answers (3)

Genfood
Genfood

Reputation: 1485

Uri.EscapeDataString will convert the string using the Uri standrards, which is not RFC 1738 conform.

RFC 1738 is an old URL standard.
I accomplished it by using FormUrlEncodedContent:

data = new List<KeyValuePair<string, string>>();
data.Add(new KeyValuePair<string, string>("key", "value"));

var payloadBody = await new FormUrlEncodedContent(data).ReadAsStringAsync();

If you don`t need a encoded URL body you probably need to trick arround with the key / value f.e. let the value empty.

Upvotes: 0

Dirk
Dirk

Reputation: 10968

According to RFC 1738:

Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
reserved characters used for their reserved purposes may be used
unencoded within a URL.

Neither HttpUtility.UrlEncode nor WebUtility.UrlEncode will encode those characters since the standard says the parentheses () can be used unencoded.

I don't know why the URL Encoder / Decoder you linked encodes them since it also lists them as as a character that can be used in a URL.

Upvotes: 9

Thomas Hetzer
Thomas Hetzer

Reputation: 1637

Uri.EscapeDataString does what you want. See MSDN.

Upvotes: 27

Related Questions