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);
                }
            }
            return stringBuilder.ToString().Replace("+", "%2B");
        }调用方法:string org_loc = this.UrlEncode("/dfdasf/get_api_m", Encoding.UTF8, true);
时间: 2024-10-07 14:11:41

HttpUtility.UrlEncode编码重写的相关文章

HttpUtility.UrlEncode,Server.UrlEncode 的区别

引用: 1.HttpUtility.UrlEncode,HttpUtility.UrlDecode是静态方法,而Server.UrlEncode,Server.UrlDecode是实例方法. 2.Server是HttpServerUtility类的实例,是System.Web.UI.Page的属性. 3.用HttpUtility.UrlEncode编码后的字符串和用Server.UrlEncode进行编码后的字符串对象不一样 server.urlEncode 可以根据你页面定义好的编码方式进行编

C#HttpUtility.UrlEncode 大写问题

工作上和另一个公司对接,调对方的api需要用到md5加密,加密前要使用HttpUtility.UrlEncode,对方接口一直返回验证错误,定位了问题发现是中文编码使用HttpUtility.UrlEncode导致的. C#中HttpUtility.UrlEncode返回的url编码是小写的,但对方是大写的,md5之后得到的hash码就不一致了,所以需要对HttpUtility.UrlEncode方法进行一层封装,代码如下: public static string UrlEncode(stri

哪些字符需要urlencode编码?具体怎么处理?

哪些字符需要urlencode编码?具体怎么处理? JS用escape()/encodeURI()/encodeURIComponent()方法编码,用unescape()/decodeURI()/ecodeURIComponent()解码. escape()/encodeURI()/encodeURIComponent()的区别: encodeURI()不编码82个字符!#$&'()*+-./:;[email protected]_~0-9a-zA-Z encodeURIComponent()

关于图灵机器人访问网址中中文编码的问题(C++下 UrlEncode编码过程)

最近在开发智能家居,子模块中调用了图灵机器人(http://tuling123.com/openapi/cloud/home.jsp) 但是发现一直不成功,返回值一直是 40006  百般调试无果  最后发现是中文转码的问题  一般网址都会讲中文进行一次转码,暂且称作 UrlEncode 转码过程很简单,因为中文编码不是一个字节,而是多个字节(ASCLL码为两个, Unicode码为三个),转码过程实际上就是将中文字符按字节输出为 : %+该字节十六进制表达式 例如 '啊' 字按位输出 则为 则

urlencode编码问题(以及urlparse)

# -*- coding: cp936 -*- #python 27 #xiaodeng #urlencode编码问题(以及urlparse) import sys, urllib def urlencode(): params={'score':100,'name':'小邓','content':'is good'} s=urllib.urlencode(params) print (s) if __name__=='__main__': urlencode() #返回结果: #content

Objective-C 对 URL 进展 URLEncode 编码

Objective-C 对 URL 进行 URLEncode 编码在 iOS 程序访问 HTTP 资源时需要对 URL 进行 Encode,比如像拼出来的 +&sd f&p2=中文,其中的中文.特殊符号&%和空格都必须进行转译才能正确访问. 在 Java..net 和 JS 中都有相应的 encodeURL 方法可用,在 Objective-C 语言中,你可以试下 - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NS

python接口自动化-urlencode编码%E6%82%A0%E6%82%A0与解码

urllib.parse 里面三个方法:urlencode,quote,unquote详解. 在做接口自动化过程中,http协议在发送url的时候,是以urlencode的编码格式传过去的,通常requests库会帮我们自动处理了.但是服务端返回的url地址,有时候是以urlencode的编码传过来的,我们需要从url上提取一些参数信息,这时候就需要对url解码了. 为什么需要urlencode编码 通常如果一样东西需要编码,说明其并不适合直接传输.原因多种多样,如Size过大,包含隐私数据.对

Owin的URL编码怎么搞?以前都是HttpUtility.UrlEncode之类的,现在连system.web都没了,肿么办?

编码: Uri.EscapeDataString(name) 解码: Uri.UnescapeDataString(name)

HttpUtility.UrlEncode 方法 (String) 对 URL 字符串进行编码 NET Framework 4.6 and 4.5

对 URL 字符串进行编码. 这些方法重载可用于对整个 URL(包括查询字符串值)进行编码. 要编码或解码 Web 应用程序之外的值,请使用 WebUtility 类. 重载此成员.有关此成员的完整信息(包括语法.用法和示例),请单击重载列表中的相应名称.