URL Encode all non alpha numeric in C#

后端 未结 4 1377
轻奢々
轻奢々 2021-01-12 11:01

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

相关标签:
4条回答
  • 2021-01-12 11:28

    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.

    0 讨论(0)
  • 2021-01-12 11:29

    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.

    0 讨论(0)
  • 2021-01-12 11:33

    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();
    
        }
    
    0 讨论(0)
  • 2021-01-12 11:35

    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

    0 讨论(0)
提交回复
热议问题