Comment savoir si une URL est décodée / encodée?
Je suis en utilisant la méthode Javascript decodeURIComponent
pour décoder une URL encodée. Maintenant, je vais avoir un problème, que, parfois, l'URL est codé par deux fois lors de la redirection entre les serveurs, parfois, il est codé en une seule fois.
Je veux vérifier que si l'URL est toujours codé après l'appel de la méthode decodeURIComponent
. Comment puis-je le faire? Un pointeur serait très utile pour moi.
Mise à jour - 1
Si je récursivement appeler une méthode et de vérifier si l'URL contient encore "%", si elle contient "%" puis de le décoder et l'appel à la méthode de nouveau; et si pas de retour à l'appelant, ça marche?
Mise à jour - 2
Pour mon cas, j'ai:
callBackUrl=http%253A%252F%252Fadbc.com%252FPOSM%252Fapp%252Fpages%252Fadf.task-flow%253Fadf.tfDoc%253D%25252FWEB-INF%25252Ftask-flows%25252Fcatalog-edit-task-flow.xml%2526adf.tfId%253Dcatalog%2526_adf.ctrl-state%253Db9akorh22_9%2526articleReference%253D10C00135%2526previousView%253Dcatalog-home%2526fromUCM%253Dtrue%2526articleType%253Dposm%2526developer%253Dcentral
Maintenant, je suis prenant la valeur de l'callBackUrl dans mon js méthode, puis du décodage et de tir window.open()
avec qui décodé URL. les paramètres sont les mêmes et l'on a:
- adf.tfDoc
- adf.tfId
- articleReference
- previousView
- fromUCM
- articleType
- développeur
Paramètres. Donc, je sais il n'y a pas de chaîne de requête comme value="%.."
.
Mise à jour - 3
J'ai écrit la méthode suivante:
var decodeURLRecursively = function(url) {
if(url.indexOf('%') != -1) {
return decodeURLRecursively(decodeURIComponent(url));
}
return url;
}
source d'informationauteur Tapas Bose
Vous devez vous connecter pour publier un commentaire.
À plusieurs reprises de décodage jusqu'à ce que vous ne trouvez pas de
%
des signes de travail de plus de 99% du temps. Ça marchera encore mieux si vous appelez plusieurs fois, aussi longtemps que un match pour/%[0-9a-f]{2}/i
peut être trouvé.Cependant, si j'étais (pour une étrange raison) de nom de fichier
100%achieved
qui serait la cause d'un problème parce que%ac
serait décodé pour¬
provoquant le décoder à l'échec. Malheureusement il n'y a aucun moyen de détecter ce cas.Idéalement, vous devriez savoir si quelque chose est codé plus d'une fois, et de façon optimale, vous ne devriez pas laisser cela se produire en premier lieu.
Il existe un moyen simple de connaître si une URL est codé.
Prendre la première chaîne et de le comparer avec le résultat de décodage. Si le résultat est le même, la chaîne n'est pas codé; si le résultat est différent, alors il est codé.
J'ai eu ce problème avec mon url et j'ai utilisé ces fonctions:
Alors maintenant, je peux utiliser
isEncoded
que le discriminant dans une boucle while (ou avec la récursivité) pour savoir si j'ai besoin de continuer à l'appelerdecodeURIComponent
sur la chaîne:Cela a résolu le problème pour moi de décodage url encodée à plusieurs reprises. Espérons que cette aide.
Test :
vous pouvez garder décoder jusqu'à ce que la chaîne n'a pas changé: