2011-01-27 65 views
27

我有一些正在用JavaScript編碼的查詢文本,但我遇到了一個用例,我可能必須在服務器端編碼相同的文本,並且發生的編碼不是相同。我需要它是一樣的。這是一個例子。Url編碼引號和空格

我在搜索框中輸入"I like food"並點擊search按鈕。 JavaScript將其編碼爲%22I%20like%20food%22

假設我在服務器端獲取與請求對象上的字符串相同的值。它看起來像這樣:"\"I like food\""

當我使用HttpUtility.UrlEncode(value)時,結果是"%22I+like+food%22"。如果我使用HttpUtility.UrlPathEncode(value),結果是"\"I%20like%20food\""

所以UrlEncode正在編碼我的引號,但使用空格的+字符。 UrlPathEncode正在編碼我的空間,但不編碼我的轉義引號。

我真的需要它來做,否則搜索代碼完全borks我(我無法控制搜索代碼)。

小貼士?

+2

做一個字符串搜索/替換以替換%20的空格,然後執行常規UrlEncode? – 2011-01-27 18:17:00

+1

@Marc乙:這不會使UrlEncode對「%」字符進行編碼(每個空間導致%2520)? UrlPathEncode非常奇怪的行爲。至少UrlEncode將文件從空格轉換爲「+」。 UrlPathEncode sais沒有關於不轉換引號... – 2011-01-27 18:35:41

+1

嗯。好點子。我猜你可以用其他方式,UrlEncode首先,然後用%20's搜索/替換+' – 2011-01-27 18:38:12

回答

51

UrlPathEncode不逃避",因爲他們並不需要在路徑組件進行轉義做。

Uri.EscapeDataString應該做你想做的。

9

有幾個選項可供您使用,最快的可能是使用UrlEncode然後做一個字符串。替換+字符與%20

喜歡的東西

HttpUtility.UrlEncode(input).Replace("+", "%20"); 
-1
WebUtility.UrlEncode(str) 

將編碼所有需要使用%XX格式編碼的字符,包括空格。