2010-12-15 6 views
1

Ich habe ein Array mit URLs wie http://www.example.com?a=1 1&b=2 2&c=3 3 und ich muss URL jede URL codieren.URLEncoding ein Array von URLs .NET

Aber wenn ich HttpServerUtility.URLEncode(url) verwenden würde Ausgang http%3a%2f%2fwww.example.com%3fa%3d1+1%26b%3d2+2%26c%3d3+3, aber ich brauche es wie http://www.example.com?a=1+1&b=2+2&c=3+3

Gibt es trotzdem zu suchen, dies zu erreichen?

Auch die Parameterwerte dürfen nicht nur ein Leerzeichen haben, sie könnten auch ein & Zeichen haben.

+0

Möchten Sie die Hälfte einer Zeichenfolge codieren? – SLaks

+0

Was ist falsch mit der Ausgabe für UrlEncode-Methode? – Nate

Antwort

0

Sie können dies tun:

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]); 

Offensichtlich Sie wollen überprüfen, auf null usw.

Edit:

war ich leicht hinter dem Ball auf dieser. Sie möchten auch Ihre oldUrlSplit [1] auf & und anschließend auf = teilen, nach dem Sie den letzten Teil nur URLEncode (nach der =). Danke an @ Anthony Pegram für das Aufzeigen.

+1

Was ist los mit '.Split ('?')'? – SLaks

+0

@Slaks: Gar nichts :-) Ich muss wieder in der Steinzeit sein, wenn nur ein Zeichenarray in 'Split' übergeben werden konnte. Aktualisierung entsprechend. Vielen Dank. –

+0

Dies ist unvollständig. '=' würde ebenfalls codiert werden, wodurch die Abfragezeichenfolge unterbrochen würde. Wenn Sie weiter gehen, ist das anschließende Aufteilen auf '=' ebenfalls ungültig, da es sehr wohl Teil eines Wertes sein könnte. –

0

Es wird keine out of the box Methode geben, um das zu tun, was Sie tun möchten. Aus programmatischer Sicht ist ein & in einem QueryString nicht etwas, das es einrichten kann.

Auch UrlEncoding eine URL eingerichtet, um über eine URL gesendet werden, deshalb wird es ersetzen die/und andere Zeichen.

Sicher können Sie die Querystring urlEncode, aber das wird höchstwahrscheinlich nicht beabsichtigte Ergebnisse verursachen.

0

Sie müssen die einzelnen Elemente NICHT die ganze Zeichenfolge codieren, damit die URL, mit der Sie enden würden, http://www.example.com?a=1%201&b=2%202&c=3%203 ist.

Können Sie sehen, wie die Räume innerhalb von 20 bis% umgewandelt wurden, aber es war nur die tatsächlichen Variablen „1 1“ „2 2“ „3 3“, die in HttpServerUtility.URLEncode() tatsächlich eingegeben werden

wie Mitchel sagt dieser Es wird keine Out-of-the-Box-Lösung sein, aber Sie könnten so etwas herumfummeln, um diese Variablen für UrlEncoding zu extrahieren.

+0

Weißt du, wie ich jeden URL-Parameter analysieren und den Wert codieren kann? –

+0

Sie * könnten * einen regulären Ausdruck verwenden, aber ich zögere, das zu empfehlen, da ich glaube, dass es fast sicher bessere Methoden gibt –

1

Vielen Dank für Ihre Antworten, Sie haben mir geholfen, eine Lösung zu finden, die ich verwenden könnte.

 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) 

Dieser Link führte mich in die ParseQueryString-Lösung.

.Net C# regex for parsing URL parameters