C# UrlEncode 与 Java、PHP 不一致

版权声明:本文为博主郎涯工作室原创文章,未经博主允许不得转载。 https://blog.csdn.net/aoshilang2249/article/details/86376803

直接上代码:

using System;
using System.Globalization;
using System.Text;
using System.Web;

namespace TestEncoder
{
    /// <summary>
    /// 字符串安全编码
    /// </summary>
    public class URLEncoder
    {
        private const string ENCODING_UTF8 = "UTF-8";

        public static string Encode(String value)
        {
            return HttpUtility.UrlEncode(value, Encoding.UTF8);
        }

        public static string PercentEncode(String value)
        {
            // 不同语言不一样
            StringBuilder stringBuilder = new StringBuilder();
            string text = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
            byte[] bytes = Encoding.GetEncoding(ENCODING_UTF8).GetBytes(value);

            foreach (char c in bytes)
            {
                if (text.IndexOf(c) >= 0)
                {
                    stringBuilder.Append(c);
                }
                else
                {
                    stringBuilder.Append("%").Append(
                        string.Format(CultureInfo.InvariantCulture, "{0:X2}", (int)c));
                }
            }
            return stringBuilder.ToString();
        }
    }
}

关键在于编码后的 % 后的 2 位字母为大写

猜你喜欢

转载自blog.csdn.net/aoshilang2249/article/details/86376803