题
我试图通过在一个Base64string成C#.Net 网络应用程序通过查询.当串达的"+"(plus)的标志是正在被一个空间。看来,自动URLDecode过程是这样做的。我有没有控制什么过去了通过查询.是否有任何方法来处理这个服务器的一面?
例如:
http://localhost:3399/Base64.aspx?VLTrap=VkxUcmFwIHNldCB0byAiRkRTQT8+PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==
生产:
VkxUcmFwIHNldCB0byAiRkRTQT8 PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==
人们建议URLEncoding的查询:
System.Web.HttpUtility.UrlEncode(yourString)
我不能这样做,因为我们无法控制的呼吁程序(这是工作的现有的其他语言)。
还有的建议取代的空间,用加号:
Request.QueryString["VLTrap"].Replace(" ", "+");
我虽然这一点,但我担心,我应该提到的这个开始,那是我不知道什么 其他的 字可能会被错误中除了加上标志。
我的主要目标是拦截的查询之前,它是通过运行解码器。
为此,我试图寻找请求。查询.toString()但是,这包含相同的格式错误的信息。是否有任何方式来看待原查询 之前 这是URLDecoded?
经过进一步的测试出现。净希望一切都来自QuerString要URL编码,但是浏览器不会自动URL编码得到的请求。
解决方案
你可以手动代替值(argument.Replace(' ', '+')
)或咨询的 HttpRequest.ServerVariables["QUERY_STRING"]
(甚至更好http请求的.网址。查询)以及分析它自己。
你应该然而试图解决的问题,其中URL;一个需要获得编码为"%2B"的网址,因为一个加,否则代表着一个空间。
如果你不控制站的网址,第一选择是优选为避免最大的错误这种方式。
其他提示
所建议的解决方案:
Request.QueryString["VLTrap"].Replace(" ", "+");
应该只是罚款。至于你的问题:
我虽然这一点,但我担心,我应该提到的这个开始,那是我不知道还有什么其他的人物可能会被错误中除了加上标志。
这是易于通过减轻 阅读有关base64.的唯一的字母数字符合法的,在现代base64是"/","+"和"="(仅用于填充).
这些,"+"是唯一一个具有特殊的意义,作为一个逃脱的代表在网址。而其他两个有特殊的意义在网址(道路分隔和query string separator),他们不应该构成一个问题。
所以我觉得你应该确定。
我有这完全相同的问题,除了我已经控制在我的网址。甚至有 Server.URLDecode
和 Server.URLEncode
它不会把它放回来了 +
签署,即使我的查询串看起来如下:
http://localhost/childapp/default.aspx?TokenID=0XU%2fKUTLau%2bnSWR7%2b5Z7DbZrhKZMyeqStyTPonw1OdI%3d
当我执行以下。
string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);
它仍然不能转换 %2b
回到一个 +
标志。而不是我必须做到以下几点:
string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);
tokenID = tokenID.Replace(" ", "+");
然后,它工作正常。真奇怪。
我有类似的问题与一个参数包含Base64值当它涉及与'+'.只的请求。查询["VLTrap"].替换("","+");作为我;没有UrlEncode或其他编码帮助,因为即使你的表演进行编码链接页面自己'+'的编码作为一个'%2b',那么它的浏览器,改变它对'+'在第一时误地呈现和当你点击它然后浏览器改变了它对空的空间。所以没有办法控制它作为原始的海报说,即使你告诉链接的自己。同样的事情与这样的链接,即使在html电子邮件。
如果你URLEncode串之前添加到网址,你不会有任何这些问题(自动URLDecode将返回到原来的状态)。
嗯,很明显你应该有Base64string URLEncoded之前发送到服务器。
如果你不能实现这一目标,我建议简单地取代任何嵌入空间回到+;由于b64串不露面信息有空间,它是一种合法战术...
System.Web.HttpUtility.UrlEncode(yourString)
将会做到。
作为一个快速破解你可以替换空间与加字之前base64-解码。
如果你使用 System.Uri.UnescapeDataString(yourString)
它会忽略的 +
.这种方法只应当使用的案件中喜欢你这里当的串的编码使用某种传统办法无论是在客户或服务器。
我绝不C#开发,但它看起来像你需要url编码你Base64string之前发送它作为一个网址。
你就不能假设一个空间是a+和替换?
Request.QueryString["VLTrap"].Replace(" ", "+");
;)