web-dev-qa-db-fra.com

Pourquoi l'URL virgule est-elle encodée?

Lors du débogage dans ASP.NET MVC, je ne vois pas de différence entre:

http://mysite.com?q=hi,bye

et

http://mysite.com?q=hi%2Cbye

Le paramètre de chaîne de requête "q" a toujours la valeur "salut, bye".

Alors pourquoi la virgule est-elle encodée?

Je veux faire quelque chose comme ça https://stackoverflow.com/a/752109/173957 .

J'ai ce formulaire:

<form method="GET" action="/Search">
     <input type="hidden" name="q" value="hi,bye"/>
     <input type="submit" value="ok"/>
</form>

Comment empêcher l'encodage de cette valeur?

27
Scott Coates

La spécification URI, RFC 3986 , spécifie que les composants de chemin URI ne contiennent pas de caractères réservés non codés et que la virgule est l'un des caractères réservés. Pour les sous-délimitations telles que la virgule, le laisser non codé risque que le caractère soit traité comme une syntaxe de séparation dans le schéma d'URI. L'encodage en pourcentage garantit que le caractère sera transmis sous forme de données.

19
Kyle Jones

J'ai trouvé cette liste de caractères qui ne nécessitent pas l'encodage URL: http://web.archive.org/web/20131212154213/http : //urldecoderonline.com/url-allowed-characters.htm

Mise à jour
Depuis la rupture du lien d'origine, j'ai utilisé archive.org pour obtenir le texte suivant à partir de la page de décembre 2013

Liste des caractères URL autorisés

Non réservé - Peut être encodé mais ce n'est pas nécessaire

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~

Réservé - Doit parfois être encodé

! * ' ( ) ; : @ & = + $ , / ? % # [ ]
8
Alex

Cela dépend vraiment du navigateur. Le navigateur prend le formulaire HTML et décide comment créer l'URL en fonction des entrées du formulaire.

Si vous utilisez un navigateur très ancien (ou mal programmé), il peut ne pas coder la virgule. Si vous adhérez aux normes RFC, il devrait vraiment être encodé.

Si vous souhaitez empêcher la virgule d'être encodée pour tous les navigateurs, vous devez utiliser JavaScript et créer l'URL vous-même.

<script lang="JavaScript">
    document.location.href = "/Search?q=hi,bye";
</script>

Dans tous les cas, cela ne devrait pas avoir d'importance, car vous devriez de toute façon décoder les paramètres de la chaîne de requête et le résultat sera le même.

2
JackAce