js中encodeURIComponent與C#中HttpUtility.UrlEncode


本文導讀:在WEB編程中,經常需要通過JS傳遞參數給C#后台代碼,如果傳遞的參數包括中文,則需要在JS中通過encodeURIComponent編碼,對應C#中的HttpUtility.UrlEncode編碼。

1、由於JS中通過encodeURIComponent編碼時,將中文或者"="、空格等特殊字符轉換為大寫,但是C#中HttpUtility.UrlEncode編碼時,則會將這些字符轉換為小寫。例如 .NET中方法HttpUtility.UrlEncode會將‘=’編碼成‘%3d’,而不是%3D。

 

2、HttpUtility.UrlEncode會把“空格”編碼為“+”,實際上應該編碼為“%20”,我們需要手動將“+”替換為“%20”。

 

3、鑒於以上兩點,我們需要利用HttpUtility.UrlEncode,重新封裝一個C#編碼方法,與JS中encodeURIComponent編碼對應起來。

 /// <summary>
        /// 小寫轉大寫,特殊字符特換
         /// </summary>
        /// <param name="strSrc">原字符串</param>
        /// <param name="encoding">編碼方式</param>
        /// <param name="bToUpper">是否轉大寫</param>
        /// <returns></returns>
        private string UrlEncode(string strSrc, System.Text.Encoding encoding, bool bToUpper)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            for (int i = 0; i < strSrc.Length; i++)
            {
                string t = strSrc[i].ToString();
                string k = HttpUtility.UrlEncode(t, encoding);
                if (t == k)
                {
                    stringBuilder.Append(t);
                }
                else
                {
                    if (bToUpper)
                        stringBuilder.Append(k.ToUpper());
                    else
                        stringBuilder.Append(k);
                }
            }
             if (bToUpper)
                return stringBuilder.ToString().Replace("+", "%20");
             else
                return stringBuilder.ToString();
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM