Comment puis-je soumettre une clé de hachage dans un paramètre d'URL?
J'ai un Spring-MVC de l'application avec Freemarker que la vue de composant.
Dans mes modèles, plusieurs liens sont générés qui renvoient à ma demande et qui comprennent des paramètres d'URL contenant une clé de hachage (#
).
Exemple:
paramètre: Q#106368 11
URL générée par Freemarker avec codées param: testurl.html?key=Q%23106368%2011
- Je utiliser JavaScript pour rediriger vers cette URL (raison: j'ai utiliser JS pour gérer le chargement de 2 images en même temps).
La méthode de redirection est simple:
function redir(url) {
window.location.href = url;
}
La JS appel généré par Freemarker ressemble
<a href="javascript:redir('http://localhost:8080/testappp/testurl.html?key=Q%23106368%2011');">test</a>
Mon problème est que le navigateur /Javascript reconvertit l'URL encodée paramètre, pense qu'il y a un #
et coupe.
Lorsque j'utilise window.location.href='http://...'
directement, il fonctionne. Uniquement lorsque vous utilisez le paramètre de méthode, il semble être comme par magie URL décodé puis la redirection ne fonctionne pas car l'URL est coupée à la #
.
Est-il un moyen facile de transmettre le paramètre correctement?
Je suis conscient que je pourrais remplacer le #
, par exemple, avec $$$hash$$$
, dans le modèle et ne le remplacement du côté du serveur de nouveau. Mais il y a tellement d'endroits que je dois changer...
OriginalL'auteur tvirtualw | 2011-07-08
Vous devez vous connecter pour publier un commentaire.
Marc B a commenté, il est nécessaire de les encoder à nouveau. La méthode serait
encodeURI()
. Cependant, cette méthode ne permet pas d'encoder le#
signe. Pour mon cas d'utilisation spécifiques, je dois remplacer le#
signe avec%23
après l'encodage.La redirection JS méthode ressemble enfin:
En comparant escape(), encodeURI(), et encodeURIComponent()
OriginalL'auteur tvirtualw
Quel navigateur utilisez-vous? Je suis en train de FireFox 5 et il ne se convertit pas
%23
de retour dans#
dans mes tests. Lorsque vous passez votre souris sur le lien ou copiez l'adresse du lien, quel est? Êtes-vous sûr de tout ce qui est sortie le lien n'est pas de faire la conversion?Mise à jour
Ce n'est pas l'idéal, mais il semble que cela résout le problème:
Il semble que la
href
attribut est décodé. Quand je souris, j'ai vu le#
au lieu de la%23
.C'est, copier l'adresse du lien ou de l'inspecter directement à partir du code.
Merci pour votre réponse. J'ai pris un peu plus près et j'ai oublié de mentionner un détail qui est très important, mais je n'ai jamais pensé qu'il serait. J'utilise une redirection Javascript méthode et il arrive quand j'utilise cette méthode. Il fonctionne très bien lorsque je copie & coller l'URL dans le navigateur. Il n'est donc pas Java/Spring/problème de navigateur, c'est une question de Javascript. J'ai mis à jour la question en conséquence.
Rappelez-vous que l'échappement/encodage ne dure qu'un voyage à travers le navigateur. Si vous faites un double-voyage, alors vous avez besoin de ré-encoder à chaque étape.
B - si j'ai juste l'URL complète de la chaîne dans la méthode JS, comment pourrais-je faire une bonne ré-encoder. Juste l'ajout d'url = encodeURI(url); ne fonctionne pas pour moi.
OriginalL'auteur laz
encodeURIComponent/decodeURIComponent est plus approfondie que la juste encodeURI, il va décoder/encoder '#' et de l'événement '/'
OriginalL'auteur Fire Crow