Pour expliquer la différence entre ces deux, permettez-moi d'expliquer la différence entre encodeURI
et encodeURIComponent
.
La principale différence est que:
- La
encodeURI
fonction est destinée à être utilisée sur l'URI complet.
- La
encodeURIComponent
fonction est destinée à être utilisée sur .. eh bien .. les composants URI qui sont n'importe quelle partie située entre les séparateurs (; /?: @ & = + $, #).
Ainsi, dans encodeURIComponent
ces séparateurs sont codés également parce qu'ils sont considérés comme du texte et non des caractères spéciaux.
Revenons maintenant à la différence entre les fonctions de décodage, chaque fonction décode les chaînes générées par son équivalent de codage correspondant en prenant soin de la sémantique des caractères spéciaux et de leur traitement.
decodeURIComponent("%C3%A9") == "é"; unescape("%C3%A9") == "é";
encodeURIComponent / decodeURIComponent () est presque toujours la paire que vous souhaitez utiliser, pour concaténer ensemble et séparer les chaînes de texte dans les parties URI.
encodeURI en moins commun et trompeusement nommé: il devrait vraiment s'appeler fixBrokenURI. Il prend quelque chose qui est presque un URI, mais contient des caractères non valides tels que des espaces, et le transforme en un vrai URI. Il a une utilisation valide pour réparer les URI invalides à partir de l'entrée utilisateur, et il peut également être utilisé pour transformer un IRI (URI avec des caractères Unicode nus en) en URI ordinaire (en utilisant UTF-8 à% échappé pour coder le code non ASCII ).
decodeURI décode les mêmes caractères que decodeURIComponent à l'exception de quelques caractères spéciaux. Il est fourni pour être un inverse de encodeURI, mais vous ne pouvez toujours pas compter sur lui pour retourner le même que celui que vous aviez mis à l'origine - voir par exemple.
decodeURI(encodeURI('%20 '));
.Là où encodeURI doit vraiment être nommé fixBrokenURI (), decodeURI () pourrait également être appelé potentiellementBreakMyPreviouslyWorkingURI (). Je ne peux penser à aucune utilisation valable pour cela n'importe où; éviter.
la source
On dirait que
encodeURI
produit un URI "sûr" en codant les espaces et certains autres caractères (par exemple non imprimables), tandis que leencodeURIComponent
code deux-points et la barre oblique et les caractères plus sont également utilisés et sont destinés à être utilisés dans les chaînes de requête. L'encodage de + et? et & est particulièrement important ici, car ce sont des caractères spéciaux dans les chaînes de requête.la source
Comme j'avais la même question, mais que je n'ai pas trouvé la réponse ici, j'ai fait quelques tests afin de comprendre quelle était la différence. Je l'ai fait, car j'ai besoin de l'encodage pour quelque chose, qui n'est pas lié à l'URL / URI.
encodeURIComponent("A")
renvoie "A", il ne code pas "A" en "% 41"decodeURIComponent("%41")
renvoie "A".encodeURI("A")
renvoie "A", il ne code pas "A" en "% 41"decodeURI("%41")
renvoie "A".-Cela signifie que les deux peuvent décoder les caractères alphanumériques, même s'ils ne les ont pas encodés. Toutefois...
encodeURIComponent("&")
renvoie "% 26".decodeURIComponent("%26")
Retour "&".encodeURI("&")
Retour "&".decodeURI("%26")
renvoie "% 26".Même si encodeURIComponent ne code pas tous les caractères, decodeURIComponent peut décoder n'importe quelle valeur entre% 00 et% 7F.
Remarque: Il semble que si vous essayez de décoder une valeur supérieure à% 7F (sauf s'il s'agit d'une valeur unicode), votre script échouera avec une "erreur URI".
la source
decodeURIComponent()
etdecodeURI()
sont l'opposé de ce qui précèdela source
decodeURIComponent décode les marqueurs spéciaux URI tels que &,?, #, etc., decodeURI non.
la source
encodeURIComponent Non échappé:
encodeURI () Non échappé:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI
la source