2010-09-02 8 views

Répondre

2

Utilisez la méthode Server.UrlEncode si vous le pouvez:

Codebehind:

string email = "[email protected]" 
lnkThingy.NavigateUrl = "http://www.website.com/Page1.aspx?email=" + Server.UrlEncode(email); 
1

Dans les URL, un signe plus est généralement utilisé comme un espace réservé pour un espace. "domain.com" est probablement en train de le traduire dans un espace avant de traiter cette page.

Vous devez échapper à l'URL plus:

http://domain.com/page1.aspx?username=johnsmith%[email protected] 

'+' == == ascii 43 0x2B. URL est Escaping "pour cent signe, valeur hexadécimale de caractère"

1

johnsmith% 2b1% 40gmail.com

Windows PowerShell 
Copyright (C) 2009 Microsoft Corporation. All rights reserved. 

PS G:\Users\Max> [reflection.assembly]::loadwithpartialname("System.Web") 

GAC Version  Location 
--- -------  -------- 
True v2.0.50727  G:\Windows\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll 


PS G:\Users\Max> [web.httputility]::UrlEncode("[email protected]") 
johnsmith%2b1%40gmail.com 
PS G:\Users\Max> 
+1

Je n'aurais jamais pensé utiliser PowerShell pour le démontrer. Cool :) –

1

Vous devez utiliser HttpUtility.UrlEncode pour cela. Il échappe à tous les caractères qui peuvent signifier quelque chose d'autre lorsqu'il est passé à l'intérieur d'une url. Votre adresse e-mail est comme ceci:

johnsmith%2b1%40gmail.com 

Les deux + et @ sont échappés en utilisant leur représentation hexadécimale, précédée d'une %. Vous pouvez vérifier cela pour vous-même here (www.asciitable.com).

0

signe plus (+) a une signification sémantique dans la chaîne de requête. Il est utilisé pour représenter un espace. La plupart des scripts côté serveur décodent les paramètres de requête avant de les utiliser, de sorte qu'un + est correctement converti en un espace . Donc, avant d'envoyer la valeur dans la chaîne de requête, convertissez + symbole avec% 2B, puis envoyez. Voici l'exemple de code.

protected void btnRedirect_Click(object sender, EventArgs e) 
{ 
    string signature="f1wRcMvJJ2YjLjc8dc+7ykY9szg=&kanna"; 
    signature = signature.Replace("+", "%2B"); 
    Response.Redirect("Encode-Decode-QueryString.aspx?sign=" +  Server.UrlEncode(signature)); 
} 

Vous pouvez consulter le lien ci-dessous pour plus de détails

http://www.dotnetpickles.com/2014/02/aspnet-how-to-pass-plus-in-query-string.html

Merci

1

Le signe plus est souvent décodé par .NET dans un espace avant d'avoir une chance d'appeler la méthode UrlDecode. J'utilise les méthodes d'extension de chaîne suivantes pour corriger le problème et fournir un meilleur accès et contrôle sur les paramètres de chaîne de requête.

/// <summary> 
    /// Character Encodes a (string). Specifically used for Querystring parameters. 
    /// </summary> 
    /// <remarks></remarks> 
    /// <param name="String"></param> 
    /// <returns>string</returns> 
    public static string EncodeForQueryString(this string String) 
    { 
     String = System.Web.HttpUtility.UrlEncode(String); 
     return String; 
    } 

    /// <summary> 
    /// Character Decodes a (string). Specifically used for Querystring parameters. 
    /// </summary> 
    /// <remarks>The plus sign causes issues when using System.Web.HttpUtility.UrlDeEncode. The plus sign is often decoded before it reaches this method. This method will replace any extra + with %2b before attempting to decode</remarks> 
    /// <param name="String"></param> 
    /// <returns>string</returns> 
    public static string DecodeForQueryString(this string String) 
    { 
     String = String.Replace("+", "%2b"); 
     String = System.Web.HttpUtility.UrlDecode(String); 
     return String; 
    } 

Pour créer la chaîne encodée pour votre valeur de paramètre querystring:

string myUrl = "myPage.htm?q=" + "Saving+Silverman".ToString().EncodeForQueryString(); 

Pour récupérer et décoder la valeur du paramètre querystring:

string myDecodedString = Request.Params["q"].DecodeForQueryString(); 
Questions connexes