Pourquoi la virgule URL encodé?
Lors du débogage dans ASP.NET MVC, je ne vois pas la différence entre:
http://mysite.com?q=hi,bye
et
http://mysite.com?q=hi%2Cbye
La chaîne de requête de paramètre "q" a toujours une valeur de "bonjour,au revoir".
Alors, pourquoi est la virgule codé?
Je veux faire quelque chose comme ceci https://stackoverflow.com/a/752109/173957.
J'ai cette forme:
<form method="GET" action="/Search">
<input type="hidden" name="q" value="hi,bye"/>
<input type="submit" value="ok"/>
</form>
Comment puis-je éviter cette valeur d'être codé?
- Pourquoi voulez-vous empêcher d'être codé? ASP.NET automatiquement le décoder pour vous, quel est donc le problème?
- J'imagine ?q=salut,bye est un peu plus lisible que ?q=bonjour%2Cbye. Aussi, je suis surtout curieux.
- Il y a des années, j'ai utilisé explicitement une virgule dans ma requête chaîne de valeur, pour la raison qu'il n'a pas été codé, et donc facilement lisible dans la barre d'adresse. Dommage que certaines bibliothèques/navigateurs maintenant encoder.
- Double Possible de stackoverflow.com/questions/2366260/...
- Double Possible de Ce qui est valable et ce n'est pas une URI de la requête?
Vous devez vous connecter pour publier un commentaire.
L'URI spec, RFC 3986, spécifie que le chemin de l'URI composants contiennent pas clair caractères réservés et la virgule est l'un des caractères réservés. Pour sous-delims comme la virgule, le laissant non codée des risques le caractère d'être traités comme séparateur de syntaxe dans le schéma d'URI. Pour cent de codage, il garantit le caractère sera transmis sous forme de données.
path = path-absolute
=>path-absolute = "/" [ segment-nz *( "/" segment ) ]
=>segment = *pchar
=>pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
=>sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
. Si une virgule est valide dans un URI segment, d'une requête ou d'un fragment.J'ai trouvé cette liste de caractères qui ne nécessitent pas de le codage d'URL:
http://web.archive.org/web/20131212154213/http://urldecoderonline.com/url-allowed-characters.htm
Mise à jour
Depuis le lien d'origine cassé, j'ai utilisé archive.org pour obtenir le texte suivant à partir de la page à partir de décembre 2013
Liste de caractères URL
Sans réserve - Peut être codé mais il n'est pas nécessaire
Réservés - doivent être encodés parfois
C'est vraiment navigateur dépendante. Le navigateur prend la forme de HTML et décide de la façon de construire l'URL en fonction de la forme des entrées.
Si vous êtes à l'aide d'un très ancien (ou mal programmé) du navigateur, il ne peut pas encoder la virgule. Si vous adhérez aux standards RFC, il ne devrait vraiment être codé.
Si vous souhaitez empêcher la virgule d'être codé pour tous les navigateurs, vous devrez utiliser JavaScript et de construire l'URL vous-même.
Dans tous les cas, il ne devrait pas, parce que vous devriez être à décoder les paramètres de chaîne de requête de toute façon, et le résultat sera le même.
il y a plusieurs personnages qui détiennent une signification particulière(comme + ? # etc) ou sont directement pas autorisé(comme l'espace, virgule, etc) dans une URL. pour utiliser ces caractères dans l'URL, u besoin d'encoder et de décoder. Lire la suite Ici
ASP.NET automatiquement encode et décode tous les caractères nécessaires comme ce si u n'a pas besoin de s'inquiéter à leur sujet.