0

我在解码带有参数的 Base64 编码 URL 时遇到了这个困难

eg: http://www.example.com/Movements.aspx?fno=hello&vol=Bits & Pieces

我的预期结果应该是:fno = hello vol = Bits & Pieces

#Encoding:
//JAVASCRIPT                
var base64 = $.base64.encode("&fno=hello&vol=Bits & Pieces");
window.location.replace("Movements.aspx?" + base64);

#Decoding c#
string decodedUrl = System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(Request.Url.Query.Replace("?", ""))); // Replace is used to remove the ? part from the query string. 
string fileno = HttpUtility.ParseQueryString(decodedUrl).Get("fno");
string vol = HttpUtility.ParseQueryString(decodedUrl).Get("vol");

实际结果:fno = hello vol = Bits

我搜索了stackoverlow,似乎我需要添加一个自定义算法来解析解码的字符串。但由于实际的 URL 比这个例子中显示的更复杂,我最好向专家寻求替代解决方案!

感谢阅读!

4

2 回答 2

1

如果 URL 编码正确,您将拥有:

http://www.example.com/Movements.aspx?fno=hello&vol=Bits+%26+Pieces

%26 是 & 的 url 编码字符,
空格将被替换为 +

在 JS 中,使用escape正确编码您的网址!

[编辑]

使用encodeURIComponent而不是escape因为就像 Sani Huttunen 所说,'escape' 已被弃用。对不起!

于 2013-06-10T12:53:46.703 回答
1

您的查询字符串需要正确编码。Base64 不是正确的方法。改为使用encodeURIComponent。您应该分别对每个值进行编码(尽管示例中的大多数部分都不需要):

var qs = "&" + encodeURIComponent("fno") + "=" + encodeURIComponent("hello") + "&" + encodeURIComponent("vol") + "=" + encodeURIComponent("Bits & Pieces");
// Result: "&fno=hello&vol=Bits%20%26%20Pieces"

然后你不需要在 C# 中进行 Base64 解码。

var qs = HttpUtility.ParseQueryString(Request.Url.Query.Replace("?", ""));
var fileno = qs.Get("fno");
var vol = sq.Get("vol");
于 2013-06-10T13:04:18.077 回答