• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C# 符合RFC3986标准的urlencode 类

OC/C/C++ 水墨上仙 1820次浏览

C# 符合RFC3986标准的urlencode 类

 /// <summary>
    /// Provides implementation of RFC3986 Percent Encoding mechanism.
    /// </summary>
    public class RFC3986Encoder
    {
        /// <summary>
        /// Performs upper case percent encoding against the specified <paramref name="input"/>.
        /// </summary>
        /// <param name="input">The string to encode.</param>
        /// <returns>Encode string.</returns>
        public static string Encode(string input)
        {
           
            if (string.IsNullOrEmpty(input))
                return input;
            StringBuilder newStr = new StringBuilder();
            foreach (var item in input)
            {
                if (IsReverseChar(item))
                {
                    newStr.Append("%");
                    var temp = ((int)item).ToString("X2");
                    newStr.Append(temp);
                }
                else
                    newStr.Append(item);
            }
            
            return newStr.ToString();
        }
        /// <summary>
        /// Performs lower case percent encoding (url-encodes) on the <paramref name="input"/> as what HttpUtility.UrlEncode does.
        /// </summary>
        /// <param name="input">The string to encode.</param>
        /// <returns>Encode string.</returns>
        public static string UrlEncode(string input)
        {
            StringBuilder newBytes = new StringBuilder();
            var urf8Bytes = Encoding.UTF8.GetBytes(input);
            foreach (var item in urf8Bytes)
            {
                if (IsReverseChar((char)item))
                {
                    newBytes.Append('%');
                    newBytes.Append(ByteToHex(item));
                }
                else
                    newBytes.Append((char)item);
            }
            return newBytes.ToString();
        }
        private static bool IsReverseChar(char c)
        {
            return !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')
                    || c == '-' || c == '_' || c == '.' || c == '~');
        }
        private static string ByteToHex(byte b)
        {
            return b.ToString("x2");
        }
        private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, 0);
        /// <summary>
        /// Gets the seconds from 1970/1/1.
        /// </summary>
        /// <param name="time">The time to calculate from.</param>
        /// <returns>The seconds.</returns>
        public static int ToUnixTime(DateTime time)
        {
            return (int)(time.ToUniversalTime() - UnixEpoch).TotalSeconds;
        }
    }


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C# 符合RFC3986标准的urlencode 类
喜欢 (0)
加载中……