2009-05-07 7 views
2

Je coder les paramètres dans une URL et la mise en href d'une une étiquette comme suit:Qu'est-ce qui ne va pas avec window.open ici?

href="javascript:var win=window.open('LayerPreview.aspx?tLNUMCswKSXpnGpQy1rWev26c5euEUa97eqiZYdDpMvDcKNbi6Z05Q3WC5DhG%2b8HJFGHAo%2fHiSFrtEEsHiConkpaT2aJ2WV0Hxxqo2l1bmkNdAotVVvI%2fT4JtE%2fc3dJ8MEAhM3NJZ15qk3fkW87q9A%3d%3d','','width=800,height=600,resizable=no','true');" 

Mais lorsque le lien est cliqué, dans le Page_Load de LayerPreview.aspx, la chaîne de requête a été modifiée , à savoir l'original:

tLNUMCswKSXpnGpQy1rWev26c5euEUa97eqiZYdDpMvDcKNbi6Z05Q3WC5DhG%2b8HJFGHAo%2fHiSFrtEEsHiConkpaT2aJ2WV0Hxxqo2l1bmkNdAotVVvI%2fT4JtE%2fc3dJ8MEAhM3NJZ15qk3fkW87q9A%3d%3d' 

devient:

tLNUMCswKSXpnGpQy1rWev26c5euEUa97eqiZYdDpMvDcKNbi6Z05Q3WC5DhG+8HJFGHAo%2fHiSFrtEEsHiConkpaT2aJ2WV0Hxxqo2l1bmkNdAotVVvI%2fT4JtE%2fc3dJ8MEAhM3NJZ15qk3fkW87q9A=%3d 

Ceci, évidemment, vis mon décodage.

Des idées?

Merci,

Carl.

Édition: J'utilise déjà System.Web.HttpUtility.UrlEncode et System.Web.HttpUtility.Decode.

est ici l'opération:

  1. Generate la chaîne de requête de texte brut.
  2. Chiffrez la chaîne de requête.
  3. Exécutez-le via System.Web.HttpUtility.UrlEncode.

Lors de la lecture de la chaîne de requête je fais tout le contraire:

  1. Lancez-le à travers System.Web.HttpUtility.UrlDecode.
  2. Déchiffrez la chaîne de requête.
  3. Lire la chaîne de requête.

Cela fonctionne partout ailleurs dans mon application Web, mais pas lors de l'assertion du lien pour l'URL window.open ou toute autre méthode javascript.

+0

Les personnes qui éditent ce post le rendent illisible. 8 ( – Carl

+0

Scunliffe, pouvez-vous s'il vous plaît annuler vos modifications à la mise en forme, merci .. – Carl

+0

Okay, défait votre ^^ mise en forme moi-même – Carl

Répondre

3

Votre chaîne contient des caractères qui vont être échappés, c'est ce qui vous arrive je crois. Je pense que vous pourriez avoir besoin d'utiliser URLEncode et URLDecode. Vous pouvez le faire soit en javascript ou sur le serveur, selon la façon dont vous arrivez avec cette longue chaîne (texte crypté?).

+0

Encore plus particulier, comment venir seulement une partie de l'URL d'échappement est convertie? Parfois% xx est converti, parfois non. – Eyal

0

Votre paramètre de requête d'origine contient un nombre de signes% en pourcentage. Ma conjecture est que ceux-ci sont à nouveau interprétés (avec les 2 ou 3 caractères suivants, recherche google pour l'encodage d'URL). Si c'est effectivement le cas, voyez si vous pouvez échapper d'une façon ou d'une autre aux signes%, ou les 'encoder'.

4

utilisation Uri.EscapeDataString et Uri.UnescapeDataString pas Uri.EscapeUriString (URLEscape est le même que EscapeUriString).

urlencode et urldecode sont pour les URLs. urlencode convertit les espaces en + et laisse "/" seul car il suppose que ce sont des caractères valides dans une URL (ce qu'ils sont). urldecode fait l'inverse en convertissant + dans l'espace. urldecode ne s'attend pas à voir + être converti. J'imagine qu'il ne s'attend pas à ce qu'une URL valide ait "==" dedans.Habituellement, c'est un groupe de "x = y" séparés par "&". "=" deux fois de suite n'a pas de sens, donc il n'en a converti qu'un seul.

Mais vous ne voulez pas + converti en espace et en arrière, vous voulez% 2b ou autre. Vous n'échappez pas à une URL, vous échappez à une chaîne de données qui sera dans une URL. Utilisez Uri.EscapeDataString et Uri.UnescapeDataString dans .NET.

(Votre "chiffrement" est en sortie 0-9 az AZ + /, soit un total de 64 caractères différents avec == à la fin, donc ne l'appelons pas "chiffrement" autant que base64. binaire, donc je suppose que ce sont les données chiffrées.)

http://codeidol.com/csharp/csharpckbk2/Web/Escaping-and-Unescaping-Data-for-the-Web/

0

je faisais face même question. Ce problème se produit lorsque nous utilisons l'attribut window.open dans href pour ouvrir une fenêtre.

Le même problème ne se produira pas si vous essayez d'appeler le même window.open depuis javascript.

La solution à ce problème est de décoder votre URL deux fois avant d'utiliser dans la fonction window.open à l'intérieur de href attribute.

Alors suivez les étapes ci-dessous

  • Generate la chaîne de requête de texte brut.

  • Chiffrez la chaîne de requête.

  • Exécutez-le sur System.Web.HttpUtility.UrlEncode.

  • Exécutez-le de nouveau à System.Web.HttpUtility.UrlEncode.