166 votes

Est-ce que C # a un équivalent à la fonction encodeURIComponent () de JavaScript?

En JavaScript:

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

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

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

Mais je ne suis pas sûr de savoir comment convertir le match au bon format hexadécimal que JS utilise. 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 "©√" au lieu de "%C2%A9%E2%88%9A". Il semble que j'ai besoin de diviser la chaîne en octets ou quelque chose.

Edit: C'est pour une application windows, les seuls éléments disponibles dans System.Web sont: AspNetHostingPermission, AspNetHostingPermissionAttribute, et AspNetHostingPermissionLevel.

286voto

Steve Points 18193

Techniquement, et souvent, dans la pratique, le haut-voté réponse n'est pas correcte.

Uri.EscapeUriString ou HttpUtility.UrlPathEncode est la bonne manière d'échapper à une chaîne destinée à faire partie d'une URL.

Prenez l'exemple de la chaîne de caractères "Stack Overflow":

  • HttpUtility.UrlEncode("Stack Overflow") --> "Stack+Overflow"

  • Uri.EscapeUriString("Stack Overflow") --> "Stack%20Overflow"

  • Uri.EscapeDataString("Stack + Overflow") --> Encode également "+" to "%2b" ---->Stack%20%2B%20%20Overflow

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

22voto

David Thibault Points 4090

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.

21voto

Ali Mamedov Points 101

J'ai essayé de faire pleinement compatible analogique de javascript encodeURIComponent pour c# et après mon 4 heure expériences, j'ai trouvé ce

le CODE c#:

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%be%d0%b2%20%d0%b1%d0%b0%d0%ba%d1%83

Après le décoder avec du Javascript decodeURLComponent();

vous obtiendrez ceci: !@#$%^&*()_+ un texte али мамедов баку

Merci de votre attention

15voto

Echilon Points 4162

System.Uri.EscapeUriString () ne semble rien avoir fait, mais System.Uri.Escape ** Data ** String () a fonctionné pour moi.

10voto

Bill Ayakatubby Points 700

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X