2012-11-18 54 views
4

我在我的web浏览器中输入以下url并按回车键。asp .net查询字符串编码和解码

http://localhost/website.aspx?paymentID=6++7d6CZRKY%3D&language=English 

现在在我的代码,当我做HttpContext.Current.Request.QueryString [ “paymentID”],

我得到6 7d6CZRKY =

但是当我做HttpContext.Current.Request。 QueryString.ToString()我看到以下内容:

paymentID = 6 + 7d6CZRKY%3D &语言=英语

我想提取实际的事情用户在Web浏览器URL中键入的付款ID。我并不担心网址是否被编码。因为我知道有一个奇怪的事情发生在这里%3D和+标志在同一时间!但我确实需要实际的+符号。不知何故,当我做HttpContext.Current.Request.QueryString [“paymentID”]时,它被解码为空间。

我只想提取用户输入的实际付款ID。什么是最好的方式来做到这一点?

谢谢。

回答

5

您需要首先使用URLEncode()对URL进行编码。 +在URL中等于一个空格,所以需要编码到%2b。

string paymentId = Server.UrlEncode("6++7d6CZRKY="); 
// paymentId = 6%2b%2b7d6CZRKY%3d 

现在

string result = Request.QueryString["paymentId"].ToString(); 
//result = 6++7d6CZRKY= 

然而

string paymentId = Server.UrlEncode("6 7d6CZRKY="); 
//paymentId looks like you want it, but the + is a space -- 6++7d6CZRKY%3d 

string result = Request.QueryString["paymentId"].ToString(); 
//result = 6 7d6CZRKY= 
+0

谢谢。我不确定是否编码HttpContext.Current.Request中的URL!所以到目前为止,我只是写了一个函数来从中提取付款ID值(弗朗西斯的方法是使用正则表达式)。 – VVV

+1

大概想找出来。其他方法不建议。 – MikeSmithDev

+0

其实我们收到的网址格式不正确。它有一个+符号,我们的客户意味着这是它的一个加号。他们应该把%2B而不是+。现在我们需要想出一些解决方法。 – VVV

1

这里有一些相关信息:Plus sign in query string

但我想你也可以使用一个正则表达式来将你的参数从查询字符串中取出。类似这样的:

string queryString = HttpContext.Current.Request.QueryString.ToString(); 
string paramPaymentID = Regex.Match(queryString, "paymentID=([^&]+)").Groups[1].Value; 
+0

感谢好友的想法。 – VVV

1

我送我的查询字符串

Arabic text in my query string

的阿拉伯文字,当我resieved这字符串它进行编码 enter image description here

Server.UrlDecode

departmentName = Server.UrlDecode(departmentName); 

再收回后,阿拉伯 enter image description here

我希望这可以帮助您