2010-12-15 70 views
1

我有一個像http://www.example.com?a=1 1&b=2 2&c=3 3這樣的URL的數組,我需要URL對每個URL進行編碼。URLEncoding一組URL URL

但是,如果使用HttpServerUtility.URLEncode(url)它將輸出http%3a%2f%2fwww.example.com%3fa%3d1+1%26b%3d2+2%26c%3d3+3,但我需要它看起來像http://www.example.com?a=1+1&b=2+2&c=3+3

反正有沒有做到這一點?

另外參數值不僅可以有空格,而且可以有一個&符號。

+0

你想編碼一半的字符串嗎? – SLaks 2010-12-15 16:20:35

+0

UrlEncode方法的輸出有什麼問題? – Nate 2010-12-15 16:22:36

回答

0

你可以這樣做:

string oldUrl = "http://www.example.com?a=1 1&b=2 2&c=3 3" 
string oldUrlSplit = oldUrl.Split('?'); 
string newUrl = oldUrlSplit[0] + HttpUtility.URLEncode(oldUrlSplit[1]); 

顯然,要空檢查等

編輯:

我有點短就這一個球。你也會想拆分你的oldUrlSplit [1] &,然後=,之後你只會URLEncode後一部分(在=之後)。感謝@Anthony Pegram指出了這一點。

+1

'.Split('?')'有什麼問題? – SLaks 2010-12-15 16:22:13

+0

@Slaks:什麼也沒有:-)我必須回到石器時代,只有一個字符數組可以傳入「Split」。相應更新。謝謝。 – 2010-12-15 16:24:29

+0

這是不完整的。 '='也會被編碼,這會破壞查詢字符串。更進一步,隨後在'='上分割也可能是無效的,因爲它可能是一個值的一部分。 – 2010-12-15 16:24:40

0

不會有一種開箱即用的方法來做你想做的事情。從編程角度來看,QueryString中的&不是它能夠設置的東西。

此外,UrlEncoding的URL設置爲通過URL發送,這就是爲什麼它要取代/和其他字符。

當然你可以urlEncode查詢字符串,但這很可能會導致意外的結果。

0

您需要對單個元素進行編碼而不是整個字符串,因此您最終得到的URL是http://www.example.com?a=1%201&b=2%202&c=3%203

你能看到內部的空間已經被轉換爲%20,但它僅僅是實際變量的「1 + 1」,「2 2」,「3 3」,這實際上是輸入到HttpServerUtility.URLEncode()

像米切爾說,這不會是一個開箱即用的解決方案,但你可以這麼擺弄一下,以便爲UrlEncoding提取這些變量。

+0

你知道我可以通過每個URL參數解析並編碼值嗎? – 2010-12-15 16:56:54

+0

你*可以*使用正則表達式,但我不情願推薦,因爲我相信幾乎肯定有更好的方法 – 2010-12-15 17:01:10

1

感謝大家的回覆,您幫我想出了一個我可以使用的解決方案。

 Dim sURL As String = "http://www.example.com?a=1 1&b=2 2&c=3 3" 
    Dim sURLParameters = sURL.Split("?") 
    Dim parameters As NameValueCollection 

    parameters = HttpUtility.ParseQueryString(sURLParameters(1)) 

    sURL = sURLParameters(0) & "?" 
    For i As Integer = 0 To parameters.Count - 1 
     sURL += parameters.Keys(i).ToString & "=" & Server.UrlEncode(parameters.Item(i).ToString) 
    Next 

    Response.Write(sURL) 

此鏈接引導我進入ParseQueryString解決方案。

.Net C# regex for parsing URL parameters