2009-06-17 11 views
4

J'ai un bookmarklet Javascript qui, lorsqu'il est cliqué sur, redirige l'utilisateur vers une nouvelle page Web et fournit l'URL de l'ancienne page Web en tant que paramètre dans la chaîne de requête.Echapper des doubles traits d'union en Javascript?

Je rencontre un problème lorsque la page Web d'origine comporte un double trait d'union dans l'URL (par exemple, page--1--of--3.html). Stupide, je sais - je ne peux pas contrôler la page d'origine La fonction javascript escape J'utilise n'échappe pas le trait d'union, et IIS 6 donne un fichier introuvable erreur si on lui demandait de servir resource.aspx?original=page--1--of--3.html

Y at-il un autre javascript fonction d'échappement que je peux utiliser? Quelle est la meilleure façon de résoudre ce problème? Est-ce que quelqu'un sait pourquoi IIS étouffe sur resource.aspx?original=page--1 et non page-1?

+0

Avez-vous vérifié les journaux du serveur pour voir à quoi il * reçoit * une demande? – Breton

Répondre

2

Pouvez-vous développer la fonction d'échappement avec une logique personnalisée pour encoder les hypen manuellement?

resource.aspx?original=page%2d%2d1%2d%2dof%2d%2d3.html 

Quelque chose comme ceci:

function customEscape(url) { 
    url = escape(url); 
    url = url.replace(/-/g, '%2d'); 
    return url; 
} 

location.href = customEscape("resource.axd?original=test--page.html"); 

mise à jour, pour un bookmarklet:

<a href="javascript:location.href=escape('resource.axd?original=test--page.html').replace(/-/g, '%2d')">Link</a> 
+0

Est-il possible de le faire dans un bookmarklet? – ine

+0

J'ai ajouté une mise à jour avec un bookmarklet – bendewey

+2

J'accepte que cela fonctionne mais franchement cela n'a aucun sens. Cela impliquerait que IIS6 fait quelque chose à l'URL qui n'est pas dans la spécification (pas surprenant mais je n'en ai jamais entendu parler non plus). – SpliFF

1

que vous faites quelque chose d'autre mal. - est légal dans les URL et les noms de fichiers. Peut-être que le fichier n'est vraiment pas trouvé?

+0

Je suis assez certain que le fichier existe et est là. L'erreur se produit uniquement lorsque les doubles traits d'union sont présents. Gardez à l'esprit ceci est IIS 6, qui peut expliquer cela. – ine

+0

avez-vous vérifié que resource.aspx n'élimine pas double-hythens pour une raison folle? – SpliFF

+0

oui, tout à fait sûr - le serveur renvoie un 404 avant resource.aspx voit même la demande – ine

1

- est utilisé pour commenter du texte dans quelques langages de script. SQL Server l'utilise pour ajouter des commentaires. Utilisez-vous une logique de base de données pour stocker ces noms de fichiers? Ou créer des requêtes où ce nom fait partie de la chaîne de requête au lieu d'utiliser des paramètres de requête? "Escape" et "unescape" sont déconseillés précisément parce qu'il ne code pas tous les caractères appropriés.

+0

non et non. Bien pensé quand même. – ine

4

NE PAS UTILISER ÉCHAPPEMENT OU UNESCAPE. utilisez plutôt "encodeURIComponent" et "decodeURIComponent". Pris en charge dans tous les navigateurs sauf les plus anciens les plus décrépits. C'est vraiment une honte que cette connaissance ne soit pas beaucoup plus commune.

(voir aussi encodeURI et decodeURI)

modifier err vient de tester, mais cela ne couvre pas vraiment les deux traits d'union encore. Pardon.

+0

Ceux-ci ne semblent pas échapper les traits d'union ... – Alconja

+0

vous avez raison, désolé - Mais la poussée de base du message est toujours vrai, même si elle ne résout pas le problème à portée de main. – Breton

Questions connexes