解码网址特别&或查询参数值中的+字符

时间:2013-06-10 12:49:19

标签: c# javascript jquery url string-decoding

我在使用参数

解码Base64编码的URL时遇到了这个困难
eg: http://www.example.com/Movements.aspx?fno=hello&vol=Bits & Pieces

我的预期结果应该是: fno =你好 vol = Bits&片

#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 =你好 vol = Bits

我搜索了stackoverlow,似乎我需要添加一个自定义算法来解析解码后的字符串。但由于实际的URL比本例中所示的更复杂,我更好地请求专家提供替代解决方案!

读书!

2 个答案:

答案 0 :(得分:1)

如果网址编码正确,您可以:

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

%26是&
的网址编码结果 和空格将被+

取代

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

<强> [编辑]

使用encodeURIComponent代替escape,因为像Sani Huttunen所说,'escape'已被弃用。遗憾!

答案 1 :(得分: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");