在应用HttpUtility.UrlEncode
或UrlDecode
时处理加密的网址参数时遇到问题。
:?fid=7kqguwhYMNw=&uid=YCRSGG71+58=
作为uid加密数据一部分的PLUS符号被删除并替换为空格,因此我尝试解密它失败。
好的,所以我知道+是QUERYSTRING(RFC 1630)中空间的保留缩写,但由于我对加密返回的值没有太多控制权,我怎么能解决这个问题呢。 p>
修改 好的,提出这么好的一点。忽略问题的UrlEncode / UrlDecode部分。当我将它传递给我的解密方法时,Request.QueryString([“uid”])仍然会从中删除加号。
答案 0 :(得分:1)
Base-64编码值在放入URL之前需要进行URL编码。如果我HttpUtility.UrlEncode("YCRSGG71+58=")
,那么我会得到YCRSGG71%2b58%3d
- 没有加号,并且可以正确解码。
换句话说,在URL上放置base-64值而不首先对其进行编码的代码是错误的。如果您控制该代码,则应更改它。如果您不控制该代码,那么请不要尝试解码首先没有进行网址编码的内容。
答案 1 :(得分:1)
我建议添加代码以删除=字符,将+替换为 - ,并替换/ with。
s = s.Replace("=", "").Replace("+", "-").Replace("/", ".")
如果您需要处理结果字符串,则可以执行相反的操作:
s = s.Replace(".", "/").Replace("-", "+")
(没有理由放回=字符......它们只是填充)。
这样您就不必担心URL编码和解码,并避免不必要的字符串扩展。如果他们最终看到URL,它对用户来说看起来也更专业...... URL中的百分号是丑陋的,几乎总是不必要的......每当我看到它时,它就会尖叫“业余”。
答案 2 :(得分:0)
作为旁注,您应该使用HttpUtility.UrlEncode
和HttpUtility.UrlDecode
来完成此类工作。但是,即使这些也不会帮助您,因为无论如何URL都是错误的。
所以,不要使用任何东西!既然它没有编码,为什么要解码?