解码Url与特殊&查询参数值中的“+”字符
Decode Url with special & or + characters in query parameters value
我在解码带有参数的Base64编码URL时遇到了这个困难
eg: http://www.example.com/Movements.aspx?fno=hello&vol=Bits & Pieces
我的预期结果应该是:Fno = hellovol = 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 = hellovol = Bits
我已经搜索stackoverlow,似乎我需要添加一个自定义算法来解析解码的字符串。但由于实际的URL比这个例子中显示的要复杂得多,我建议最好向专家寻求替代解决方案!
感谢阅读!
您的querystring需要正确编码。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");
如果URL被正确编码,您将有:
http://www.example.com/Movements.aspx?fno=hello&卷= + % 26 +星星点点
%26是&
的url编码字符。空格将被+
在JS中,使用escape
来正确编码你的url!
[编辑]
使用encodeURIComponent
而不是escape
,因为正如Sani Huttunen所说,'escape'已弃用。对不起!
相关文章:
- 在 Javascript 函数中对参数值使用特殊字符时出现 Javascript 错误
- 为javascript函数提供可能包含特殊字符的字符串参数
- 删除错误.MongooDB + Express.传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符
- 为什么.replace 方法使用正斜杠字符将第一个参数括起来
- 如何将 url 中的特殊字符作为参数值处理
- 如何在最后一次出现某个字符后获取 url 中的参数
- 通过 JS 解析 URL 参数,但仅将前八个字符作为值添加到 HTML 表单中
- 将带有字母字符的字符串参数传递给无法工作的javascript函数
- 编码特殊字符<和比;在MVC参数
- 解码Url与特殊&查询参数值中的“+”字符
- 木偶批准包括"/"路由参数中的字符
- 使用javascript在URL中传递包含特殊字符的参数
- 在javascript中通过正则表达式替换URL参数中的字符
- 将email id作为参数发送给javascript函数:语法错误非法字符
- 如何用JavaScript将URL中的非ascii字符参数传递给JSP/Servlet
- 在javascript函数参数中编码特殊字符
- 在使用循环参数的字符填充数组时遇到麻烦
- asp.net mvc-带参数的Javascript字符计数器功能
- 使用javascript获取包含所有字符的查询字符串参数
- 转义字符生成“;缺少)在参数列表“”之后;错误