2011-07-28 166 views
39

我有一個使用C#和asp.net創建的webapp。我用加號(+)在查詢字符串中放置了一個參數值。但加號消失。加號查詢字符串

如何在查詢字符串中包含加號(+)而不會消失?

請指教。

謝謝。

編輯:添加的代碼用urlencode

string str = Server.UrlEncode(Requery.QueryString["new"]); 
+0

您是否有密碼? – tutts

+0

其實值取決於用戶輸入。 – domlao

+0

僅供參考'UrlBuilder',這似乎有點無用,這是我怎麼偶然發現你的問題。看到http://stackoverflow.com/questions/24576239/why-doesnt-uribuilder-query-escaping-url-encoding-the-query-string – KCD

回答

81

+ sign在查詢字符串中具有語義含義。它用來表示空間。在查詢字符串中具有語義重要性的另一個字符是&,它用於分隔查詢字符串中的各個var=value對。

大多數服務器端腳本會在使用它們之前解碼查詢參數,以便+正確轉換爲空格。現在,如果您希望在查詢字符串中存在文字+,則需要改爲指定%2B

+登錄查詢字符串是URL解碼爲空格。查詢字符串中的%2B被URL解碼爲+符號。

http://www.google.com/search?q=foo+bar

http://www.google.com/search?q=foo%2Bbar

在上面的例子之間的差別,谷歌的服務器腳本是用它們做搜索URL解碼查詢參數,然後。

URL編碼只不過是%符號後面跟着特殊字符的十六進制代碼。例如,我們知道A的十六進制代碼是0x41(十進制:65)。試試這個:

http://www.google.com/search?q=%41

希望這是URL編碼清晰。

因此,如果您希望+符號在JavaScript查詢參數中獲取帶有+符號的URL時被保留,並且服務器端腳本將在URL解碼之後處理查詢參數,則應該使用URL編碼在使用發出HTTP獲取請求之前URL中的查詢參數,以便當請求到達服務器端腳本時,所有+標誌被轉換爲%2B。現在,當服務器端腳本URL解碼查詢字符串時,所有%2B都會被轉換回+這是您想要的。

請參閱Encode URL in JavaScript?瞭解如何使用JavaScript對參數進行URL編碼。從討論中有簡短的回答:

var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param); 
+0

如何在JavaScript中將+符號替換爲%2B。因爲我在javascript中創建我的查詢字符串。 – domlao

+1

krakat,請參閱http://stackoverflow.com/q/332872/303363 –

4

你應該進行urlencode您的查詢字符串值,以確保任何特殊字符不會丟失。

+0

像這樣,string str = Server.UrlEncode( Requery.QueryString [ 「新」]); ? THanks – domlao

+0

不完全是,您需要在將它們放入查詢字符串之前對它們進行編碼,而不是在將它們取出時。你如何設置查詢字符串中的值?使用Javascript中的 – DoctorMick

+0

,像$(「#btn」)。click(function(){var param =「C++」; ...}); – domlao

0

我改變了我以前的陳述,所以沒有人會感到困惑!

使用Server.UrlEncode創建您的網址。 例如

string myUrl = "http://myurl?param1=" + Server.UrlEncode("my+param+1"); 
+1

如果是網址,則應該使用URL編碼,**不可以** Html編碼。他們是不同的。 –

+0

我在javascript中添加了我的querystring,是否有任何可能的方式來編碼它的JavaScript? – domlao

+0

你是對的!抱歉有任何不便! – gred

-1

的解決方案是始終包括.Replace(」「 ,「+」)當您請求查詢字符串

string s = Request.QueryString [「id」]。Trim()。Replace(「」,「+」);

來源:http://www.webmasterworld.com/forum47/3238.htm

-1

試試這個,它爲我工作:

Request.QueryString["new"].Trim(); 
0

其他簡單的方法是,Request.Url.ToString().Substring(Request.Url.ToString().IndexOf("=") + 1)假設我的網址,http://localhost/MyApp/Activate.aspx?ActivationCode=cHbtqH9P2dDZkx/mYUgFFo7nrNqSFgqdPisAzzu5/nwlEYDOHI+CQw==

-1

在解密Funcation加入這一行:

strText = strText.Replace(" ", "+"); 
+1

其他保留字符呢?這個解決方案只會解決+,而不是?等等 –

0

在發送給你之​​前ameter,你需要檢查參數包含加號,如果有需要更換一個標誌,例如: 的參數:klasjdlkasd + djid3223 可以更換:klasjdlkasdFLAGdjid3223

,當你去轉換,你需要替換angain

klasjdlkasd + djid3223