2010-12-15 6 views
1

J'ai un tableau avec des URLs comme http://www.example.com?a=1 1&b=2 2&c=3 3 et j'ai besoin d'URL pour coder chacune des URL.URLEncoding un tableau d'URL .NET

Mais si je l'utilise HttpServerUtility.URLEncode(url) il serait sortie http%3a%2f%2fwww.example.com%3fa%3d1+1%26b%3d2+2%26c%3d3+3, mais je dois à ressembler http://www.example.com?a=1+1&b=2+2&c=3+3

Y at-il de toute façon d'y parvenir?

Les valeurs des paramètres peuvent non seulement avoir un espace, mais aussi un signe &.

+0

Essayez-vous de coder la moitié d'une chaîne? – SLaks

+0

Quel est le problème avec la sortie pour la méthode UrlEncode? – Nate

Répondre

0

Vous pouvez le faire:

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

De toute évidence, vous voulez null vérifier, etc.

Edit:

J'étais un peu court de la balle sur celui-ci. Vous devrez également diviser votre oldUrlSplit [1] sur & et par la suite sur =, après quoi vous ne ferez qu'INDREcode la dernière partie (après le =). Merci à @Anthony Pegram pour l'avoir signalé.

+1

Qu'est-ce qui ne va pas avec '.Split ('?')'? – SLaks

+0

@Slaks: Rien du tout :-) Je dois être de retour à l'âge de la pierre où seul un tableau de caractères pourrait être passé dans 'Split'. Mise à jour en conséquence. Merci. –

+0

Ceci est incomplet. '=' serait également encodé, ce qui casserait la chaîne de requête. Pour aller plus loin, scinder par la suite '=' peut aussi être invalide car il pourrait très bien faire partie d'une valeur. –

0

Il n'y aura pas de méthode prête à l'emploi pour faire ce que vous voulez faire. D'un point de vue programmatique, un & dans un QueryString n'est pas quelque chose qu'il va pouvoir configurer. En outre, UrlEncoding une adresse URL est configurée pour être envoyée via une URL, c'est pourquoi elle va remplacer les caractères/et autres.

Bien sûr, vous pouvez urlEncode la chaîne de requête, mais cela entraînera probablement des résultats inattendus.

0

Vous devez encoder les éléments individuels PAS toute la chaîne de sorte que l'URL que vous obtiendriez est http://www.example.com?a=1%201&b=2%202&c=3%203.

Pouvez-vous voir comment les espaces à l'intérieur ont été convertis en% 20 mais il était seulement les variables réelles « 1 1 » « 2 2 » « 3 3 » qui sont en fait entrée dans HttpServerUtility.URLEncode()

Comme Mitchel dit ce ne va pas être une solution prête à l'emploi, mais vous pouvez donc jouer du violon afin d'extraire ces variables pour UrlEncoding.

+0

Connaissez-vous un moyen que je pourrais analyser à travers chaque paramètre d'URL et Encoder la valeur? –

+0

Vous * pourriez * utiliser une expression régulière, mais je suis réticent à recommander que, car je crois qu'il y a certainement de meilleures méthodes –

1

Merci à tous pour vos réponses, vous m'avez aidé à trouver une solution que je pouvais utiliser.

 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) 

Ce lien m'amène à la solution ParseQueryString.

.Net C# regex for parsing URL parameters

Questions connexes