I need to fully URL Encode an email address.
HttpUtility.UrlEncode seems to ignore certain characters such as ! and .
I need to pass an email address in a ur
I've discovered a solution to this issue.
.Net 4.0 has actually fixed the problem with special characters in the URI Template.
This thread pointed me in the right direction. http://social.msdn.microsoft.com/Forums/en/dataservices/thread/b5a14fc9-3975-4a7f-bdaa-b97b8f26212b
I added all the config settings and it worked. But note, it ONLY works with a REAL IIS setup with .Net 4.0. I can't seem to get it to work with the Visual Studio Dev IIS.
Update - Actually, I tried removing those config settings and it still works. It maybe be that .Net 4.0 has fixed this problem by default.
Here's a potential Regex you could use to accomplish the encoding.
Regex.Replace(s, @"[^\w]", m => "%" + ((int)m.Value[0]).ToString("X2"));
I'm not sure that there is an existing framework method defined to strictly encode all non-alphanumeric characters that you could point your clients to.
Use hex. There is a ConvertTo and a From and a sample test...
You can also just scape the characters that don't match A to Z by using a regex so your URL still looks pretty.
It will return a big list of numbers so you should be good
public static string ConvertToHex(string asciiString)
{
var hex = "";
foreach (var c in asciiString)
{
int tmp = c;
hex += String.Format("{0:x2}", Convert.ToUInt32(tmp.ToString()));
}
return hex;
}
public static string ConvertToString(string hex)
{
var stringValue = "";
// While there's still something to convert in the hex string
while (hex.Length > 0)
{
stringValue += Convert.ToChar(Convert.ToUInt32(hex.Substring(0, 2), 16)).ToString();
// Remove from the hex object the converted value
hex = hex.Substring(2, hex.Length - 2);
}
return stringValue;
}
static void Main(string[] args)
{
string hex = ConvertToHex("don.joe@gmail.com");
Console.WriteLine(hex);
Console.ReadLine();
string stringValue =
ConvertToString(hex);
Console.WriteLine(stringValue);
Console.ReadLine();
}
Unless I am mistaken, URL Encoding is simply the percent sign followed by the ASCII number (in hex), so this should work...
Dim Encoded as New StringBuilder()
For Each Ch as Char In "something+me@example.com"
If Char.IsLetterOrDigit(Ch)
Encoded.Append(Ch)
Else
Encoded.Append("%")
Dim Byt as Byte = Encoding.ASCII.GetBytes(Ch)(0)
Encoded.AppendFormat("{0:x2}", Byt)
End If
Next
The above code results in something%2Bme%40example.com