2012-11-18 82 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

我希望這可以幫助您