Exemple #1
0
 /// <summary>
 /// Encodes a URL string so any characters that require percent encoding are encoded
 /// </summary>
 /// <param name="value">Value to encode</param>
 /// <returns></returns>
 public static String UrlEncode(String value)
 {
     if (!IsUnsafeUrlString(value))
     {
         return(value);
     }
     else
     {
         char          c, d, e;
         StringBuilder output = new StringBuilder();
         for (int i = 0; i < value.Length; i++)
         {
             c = value[i];
             if (!IsSafeCharacter(c))
             {
                 if (c == '%')
                 {
                     if (i <= value.Length - 2)
                     {
                         d = value[i + 1];
                         e = value[i + 2];
                         if (IriSpecsHelper.IsHexDigit(d) && IriSpecsHelper.IsHexDigit(e))
                         {
                             //Has valid hex digits after it so continue encoding normally
                             output.Append(c);
                         }
                         else
                         {
                             //Need to encode a bare percent character
                             output.Append(PercentEncode(c));
                         }
                     }
                     else
                     {
                         //Not enough characters after a % to use as a valid escape so encode the percent
                         output.Append(PercentEncode(c));
                     }
                 }
                 else
                 {
                     //Contains an unsafe character so percent encode
                     output.Append(PercentEncode(c));
                 }
             }
             else
             {
                 //No need to encode safe characters
                 output.Append(c);
             }
         }
         return(output.ToString());
     }
 }
Exemple #2
0
        private static bool IsUnsafeUrlString(String value)
        {
            char c, d, e;

            for (int i = 0; i < value.Length; i++)
            {
                c = value[i];
                if (!IsSafeCharacter(c))
                {
                    if (c == '%')
                    {
                        if (i <= value.Length - 2)
                        {
                            d = value[i + 1];
                            e = value[i + 2];
                            if (IriSpecsHelper.IsHexDigit(d) && IriSpecsHelper.IsHexDigit(e))
                            {
                                i += 2;
                                continue;
                            }
                            else
                            {
                                //Expected two hex digits after a % as an escape
                                return(true);
                            }
                        }
                        else
                        {
                            //Not enough characters after a % to use as a valid escape
                            return(true);
                        }
                    }
                    else
                    {
                        //Contains an unsafe character
                        return(true);
                    }
                }
            }

            //All Characters OK
            return(false);
        }