966 votes

Le caractère espace de codage d’URL : + ou % 20 ?

Quelle est un espace dans un URL codée pour , et quand elle est encodée en ?

528voto

Joey Points 148544

À partir de Wikipédia (l'accent et lien):

Lorsque les données saisies dans des formulaires HTML est soumis, la forme des noms de champ et les valeurs sont codées et envoyées vers le serveur HTTP d'un message de demande d'aide de la méthode GET ou POST, ou, historiquement, par e-mail. L'encodage utilisé par défaut est basé sur une première version de la générale URI % -règles de codage, avec un certain nombre de modifications tels que le saut de ligne de la normalisation et de remplacer les espaces par un "+" au lieu de "%20". Le type MIME des données codées de cette façon est application/x-www-form-urlencoded, et il est actuellement défini (toujours dans une très obsolètes) dans le HTML et XForms cahier des charges.

Donc, le réel pour cent de codage utilise %20 , tandis que le formulaire de données dans l'Url est dans une forme modifiée qui utilise +. Donc, vous êtes plus susceptible de voir seulement + dans les Url dans la chaîne de requête après un ?.

27voto

Rui Vieira Points 2713

Je recommande %20.

Êtes-vous de coder en dur?

Ce n'est pas très cohérent à travers les langues. Si je ne me trompe pas, en PHP urlencode() traite les espaces qu' + alors que Python urlencode() traite comme %20.

EDIT:

Il semble que je me trompe. Python urlencode() (au moins dans 2.7.2) utilise quote_plus() au lieu de quote() et donc encode les espaces comme des "+". Il semble également que la recommandation du W3C est la "+" comme par ici: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1

Et en fait, vous pouvez suivre ce débat intéressant sur Python de tracker sur ce à utiliser pour coder les espaces: http://bugs.python.org/issue13866.

EDIT #2:

Je comprends que la façon la plus courante de "codage" est un "+", mais juste une remarque, c'est peut-être juste moi, mais je trouve cela un peu confus:

import urllib
print(urllib.urlencode({' ' : '+ '})

>>> '+=%2B+'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X