HttpUtility.UrlEncode編碼重寫


1. 某些系統方法,例如.NET系統方法HttpUtility.UrlEncode會將‘=’編碼成‘%3d’,而不是%3D,導致加密簽名通不過驗證,請開發者注意檢查。

2.Java 1.3和早期版本中,調用java.net.URLEncoder下的方法進行URL編碼時,某些特殊字符並不會被編碼,例如星號(*)。 由於URL編碼規則中規定了星號(*)必須編碼,因此在請求字符串中含星號(*)的情況下如果使用了上述方法,會導致生成的簽名不能通過驗證。 例如調用v3/pay/buy_goods接口時, payitem參數值中一定會含有* ,在使用類java.net.URLEncoder下的方法進行編碼后,需開發人員手動將星號字符“*”替換為“%2A”,否則將導致加密簽名一直通不過驗證,請開發者注意檢查。

3. 某些語言的urlencode方法會把“空格”編碼為“+”,實際上應該編碼為“%2B”。這也將生成錯誤的簽名,導致簽名通不過驗證。 請開發者注意檢查,手動將“+”替換為“%2B”。 在PHP中,推薦用rawurlencode方法進行URL編碼。

下面是關於c#語言對UrlEncode重寫:

        /// <summary>
        /// UrlEncode重寫:小寫轉大寫,特殊字符特換
        /// </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("+", "%2B"); else
return stringBuilder.ToString();
}
調用方法:
string org_loc = this.UrlEncode("/dfdasf/get_api_m", Encoding.UTF8, true);

 


免責聲明!

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



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