zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    PHP 超级全局变量
    PHP 魔术变量
    PHP 变量
    Thinkphp 模板中常用的系统变量总结
    PHP $GLOBALS超全局变量分析
    php使用curl的post提交数据和get获取网页数据的方法总结
    php获取客户端真实ip地址的三种方法
    Jquery 【on事件】
    ptyhon【递归练习】
    C#中的线程
  • 原文地址:https://www.cnblogs.com/yonguibe/p/4353079.html
Copyright © 2011-2022 走看看