HttpUtility.UrlEncode不对像+这样的字符进行编码

时间:2016-09-09 12:22:16

标签: c# asp.net httprequest urlencode url-encoding

我有一个加密的字符串,看起来像这样

Pfx32q+xLq4R+VocXy4IC8aQNdmFqdA284THap54Bl4=

在加密此字符串时,我们调用HttpUtility.UrlEncode("Pfx32q+xLq4R+VocXy4IC8aQNdmFqdA284THap54Bl4=")将加密字符串作为参数传递,这将返回一个值

Pfx32q%2BxLq4R%2BVocXy4IC8aQNdmFqdA284THap54Bl4%3D

我的开发系统中+替换为%2等等,但是当生产服务器上运行相同的代码时,plus不会被编码,而是保留为+。

我们无法指出造成这种情况的真正原因。是否存在一种场景或案例,在调用HttpUtility.UrlEncode方法时,像+这样的字符不会被编码?

1 个答案:

答案 0 :(得分:1)

有同样的问题。首先将加密的字符串转换为Base64,然后将UrlEncoded。

    string urlOut = HttpUtility.UrlEncode(Base64Encode("Pfx32q+xLq4R+VocXy4IC8aQNdmFqdA284THap54Bl4="));

    string urlIn = Base64Decode(HttpUtility.UrlDecode(urlOut));

    public static string Base64Encode(string plainText)
    {
        var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
        return Convert.ToBase64String(plainTextBytes);
    }

    public static string Base64Decode(string base64EncodedData)
    {
        var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
        return Encoding.UTF8.GetString(base64EncodedBytes);
    }