Question

En JavaScript:

encodeURIComponent("©√") == "%C2%A9%E2%88%9A"

Existe-t-il un équivalent pour les applications C #? Pour échapper des caractères HTML, j’ai utilisé:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"&#" + ((int)m.Value[0]).ToString() + ";");

Mais je ne sais pas comment convertir la correspondance au format hexadécimal correct utilisé par JS. Par exemple ce code:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));

Renvoie " % a9% 221a "" pour "& # 169; & # 8730;" au lieu de "% C2% A9% E2% 88% 9A ". Il semblerait que j’ai besoin de scinder la chaîne en octets ou autre chose.

Modifier: il s’agit d’une application Windows. Les seuls éléments disponibles dans System.Web sont: AspNetHostingPermission , AspNetHostingPermissionAttribute et AspNetHostingPermissionLevel .

Était-ce utile?

La solution

Uri.EscapeDataString ou HttpUtility.UrlEncode est le moyen approprié pour échapper à une chaîne destinée à faire partie d'une URL.

Prenez par exemple la chaîne "Dépassement de pile" :

  • HttpUtility.UrlEncode (" Dépassement de pile ") - > "Pile + débordement"

  • Uri.EscapeUriString (" dépassement de pile ") - > "Pile% 20Overflow"

  • Uri.EscapeDataString (& pile; pile + débordement ") - > Encode également " + " to "% 2b" ----> Pile% 20% 2B% 20% 20Overflow

Seul le dernier est correct lorsqu'il est utilisé comme partie réelle de l'URL (par opposition à la valeur de l'un des paramètres de la chaîne de requête)

Autres conseils

HttpUtility.HtmlEncode / Decode
HttpUtility.UrlEncode / Decode

Vous pouvez ajouter une référence à l'assembly System.Web s'il n'est pas disponible dans votre projet

.

J'ai essayé de faire l'analogue entièrement compatible d'encodecomposant de javascript pour c # et après mes expériences de 4 heures, j'ai trouvé ceci

.

c # CODE:

string a = "!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");

le résultat est: !% 40% 23% 24% 25% 5e% 26 * () _% 2b% 20some% 20text% 20here% 20% d0% b0% d0% bb% d0% b8% 20% d0% bc% d0 % b0% d0% bc% d0% b5% d0% b4% d0% être% d0% b2% 20% d0% b1% d0% b0% d0% ba% d1% 83

Après l'avoir décodé avec le script décodeURLComponent ();

de Javascript

vous obtiendrez ceci: ! @ # $% ^ & amp; * () _ + du texte ici ??? ??????? ????

Merci de votre attention

System.Uri.EscapeUriString () n'a apparemment rien fait, mais System.Uri.Escape Données String () a fonctionné pour moi.

Essayez Server.UrlEncode () ou System.Web.HttpUtility.UrlEncode () pour les cas où vous n'avez pas accès au Serveur objet. Vous pouvez également utiliser System.Uri.EscapeUriString () pour éviter d'ajouter une référence à l'assembly System.Web .

Vous pouvez utiliser l'objet Serveur dans l'espace de noms System.Web

Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode et Server.HtmlDecode.

Edit: poster a ajouté qu'il s'agissait d'une application Windows et non d'une application Web, comme on pourrait le croire. Les éléments répertoriés ci-dessus seraient disponibles dans la classe HttpUtility de System.Web, qui doit être ajoutée en tant que référence au projet.

Pour une application Windows Store, vous n'avez pas HttpUtility. Au lieu de cela, vous avez:

Pour un URI, avant le '?':

  • Système. Uri.EscapeUriString ("example.com/Stack Overflow ++?")
    • - > "exemple.com/Stack%20Overflow ++?"

Pour un nom de requête URI ou une valeur après le '?':

  • Système. Uri.EscapeDataString ("Stack Overflow ++")
    • - > "Stack% 20Overflow% 2B% 2B"

Pour un x-www-form-urlencoded nom ou valeur de la requête, dans un contenu POST:

  • System.Net. WebUtility.UrlEncode ("Stack Overflow ++")
    • - > "Pile + Dépassement% 2B% 2B"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top