2009-02-05 9 views
6

J'ai une URL qui nécessite des paramètres. Les valeurs de ces paramètres peuvent être des caractères accentués, donc j'ai absolument besoin d'UrlEncode. Bizarrement, je vois une différence entre le comportement ou Javascript et .NET.UrlEncode - Javascript vs C#

Faisons semblant d'essayer d'UrlEncode le mot "éléphant". En JavaScript (en fonction de ce site Web: http://www.albionresearch.com/misc/urlencode.php), voici ce qui suit:% E9l% E9phant. Cela me semble correct. Cependant, dans .NET avec cet appel (System.Web.HttpUtility.UrlEncode ("éléphant")) j'obtiens "% c3% a9l% c3% a9phant". Qu'est-ce qui ne va pas? Qu'est-ce que je rate? Que dois-je faire si je veux obtenir% E9l% E9phant dans .NET?

Merci!

+0

J'ai eu exactement le même problème tout à l'heure. Merci d'avoir posé la question "pour moi" - m'a permis de résoudre le problème assez rapidement. –

Répondre

10

System.Web.HttpUtility.UrlEncode utilisera UTF8 (je pense ..) comme encodeur par défaut, vous pouvez changer cela en spécifiant un ..

System.Web.HttpUtility.UrlEncode("éléphant", Encoding.Default); // %e9l%e9phant 

Bien qu'il soit préférable de spécifier une réelle page de codes ou quoi que ce soit, au lieu de s'appuyer sur l'OS par défaut.

5

Référence:

js:  %E9 l  %E9 phant 
.net: %c3 %a9 l %c3 %a9 phant 

La différence est que l'on est le codage URL UTF-8 alors que l'autre est en vous donnant le codage URL ANSI.

Dans .NET, essayez:

Dim a As String = System.Web.HttpUtility.UrlEncode(_ 
    "éléphant", _ 
    Text.Encoding.Default) 

Je reçois

%e9 l  %e9 phant 

en conséquence. Cela correspond à la chaîne que vous avez fournie pour JavaScript, à l'exception du cas Hex Character.

3

Encoding.Default ne fonctionnera que si la page de codes actuelle de votre système est définie sur Europe de l'Ouest. Maintenant, cela peut être important si le Javascript fonctionne également sur la même machine que le codeur .NET, mais sinon, vous pouvez forcer la page de code à celui de l'Europe occidentale:

System.Web.HttpUtility.UrlEncode("éléphant", Encoding.GetEncoding(1252)); 
2

Vous pouvez également essayer base64 les encoder. Il y a un previous post qui s'occupe de le faire en JavaScript. Comme dans .NET, il existe de nombreux exemples montrant comment le faire. Voici un I found de Google.

Bien sûr, les chaînes peuvent être un peu plus grandes que l'encodage url. Cependant, ils seront obfuscated ce qui peut être un avantage selon l'application.

6

En JavaScript (selon ce site Web: http://www.albionresearch.com/misc/urlencode.php), voici ce qui suit:% E9l% E9phant.

Cette page est erronée. JavaScript utilise également UTF-8, comme .NET le fait par défaut. Essayez-le vous-même:

javascript:alert(encodeURIComponent('éléphant')) 
%C3%A9l%C3%A9phant 

Les URL sont aujourd'hui UTF-8. N'essayez plus d'utiliser cp1252. UTF-8 est votre ami. Faites confiance à UTF-8!