2010-10-12 25 views
3

J'ai un problème de codage JS puis de décodage sur le serveur C#. J'utilise la fonction javascript encode() - mais quand j'ai des caractères spéciaux comme +, le C# a httputility.urldecode() -> et il le convertit comme s'il s'agissait d'un caractère SPACE. Quel est le meilleur moyen de communiquer le codage JS et le décodage C#?Problèmes de codage des chaînes de décodage JS <-> C#

Je <a href='javascript:foo(escape('hello +'))' />

function foo(data) 
{ 
$.ajax({ url: "http:/....." + data, dataType: 'html', context: document.body 
... 
... 
} 

Je débogués le serveur, et je reçois 'bonjour ++' - il ne marche pas savoir + qui est qui (espace ou +) Merci!

Répondre

2

Javascript encode fait html codage. Puisque + est valide en HTML, il ne fait rien à +.

Toutefois, vous passez cette chaîne via l'URL - + sur une URL signifie un espace codé.

Vous devez utiliser le javascript encodeURIComponent si vous voulez que le + à coder correctement pour la consommation sur le côté serveur:

<a href='javascript:foo(encodeURIComponent('hello +'))' /> 

Vous devez comprendre que le codage HTML et le codage des URL sont different things.

+0

Ne fonctionne toujours pas. Le JS passe '+' au serveur, mais il décode toujours le + en '' – Himberjack

+0

Comment passe-t-il le '+ 'au serveur? Vous devriez probablement encoder le '+' avant de le transmettre, comme dans une URL + _is_ l'encodage d'un espace. – Oded

+0

Je fais échapper ("blalblba +") – Himberjack

2

javascript:

escape(string); 

C#:

Microsoft.JScript.GlobalObject.unescape(string); 

cette combinaison fonctionne bien pour moi.

-1

Non Besoin de codage en javascript et de décodage en C#. Utilisez simplement la fonction javascript 'encodeURIComponent (string)' et inutile de modifier le code C#.