Quand un espace dans une URL +
est-il codé et quand est-il codé %20
?
url
url-encoding
AVANT JC.
la source
la source
Réponses:
De Wikipédia (accentuation et lien ajoutés):
Ainsi, le pourcentage réel d' encodage utilise
%20
alors que les données de formulaire dans les URL sont sous une forme modifiée qui utilise+
. Il est donc très probable que vous ne voyiez que les+
URL dans la chaîne de requête après un?
.la source
multipart/form-data
utilise le codage MIME;application/x-www-form-urlencoded
utilise+
et utilise correctement les URI codés%20
.http://www.bing.com/search?q=hello+world
et une ressource avec un espace dans le nomhttp://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
mailto:[email protected]?subject=I%20need%20help
,. Si vous avez essayé avec +, l'e-mail s'ouvrira avec + es au lieu d'espaces.Cette confusion est due au fait que les URL sont toujours «cassées» à ce jour.
Cela se résume à:
Vous devriez avoir
%20
avant?
et+
après.La source
la source
key1=value1&key1=value2
où les clés et les valeurs sont encodées avec les règles quiencodeURIComponent
suivent, mais AFAIK le contenu de la partie de la requête est entièrement à 100% jusqu'à l'application. À part cela, cela ne va qu'au premier,#
il n'y a pas d'encodage officiel.Je recommanderais
%20
.Les codez-vous en dur?
Cependant, ce n'est pas très cohérent entre les langues. Si je ne me trompe pas, en PHP
urlencode()
traite les espaces comme+
tandis que Python lesurlencode()
traite comme%20
.ÉDITER:
Il semble que je me trompe. Python
urlencode()
(au moins en 2.7.2) utilise à laquote_plus()
place dequote()
et encode donc les espaces en "+". Il semble également que la recommandation du W3C soit le "+" comme ici: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1Et en fait, vous pouvez suivre ce débat intéressant sur le propre tracker de problème de Python sur ce qu'il faut utiliser pour encoder les espaces: http://bugs.python.org/issue13866 .
EDIT # 2:
Je comprends que la façon la plus courante d'encoder "" est comme "+", mais juste une note, c'est peut-être juste moi, mais je trouve cela un peu déroutant:
la source
URLEncoder.encode()
méthode en Java le convertit+
également.Un espace ne peut être codé qu'en "+" dans la partie de requête de paires clé-valeur de type de contenu "application / x-www-form-urlencoded". À mon avis, c'est un MAI, pas un MUST. Dans le reste des URL, il est codé en% 20.
À mon avis, il est préférable de toujours coder les espaces en% 20, pas en "+", même dans la partie requête d'une URL, car c'est la spécification HTML (RFC-1866) qui spécifie que les caractères d'espace doivent être codés en " + paires "clé-valeur" de type de contenu "application" / x-www-form-urlencoded "(voir paragraphe 8.2.1. alinéa 1)
Cette façon d'encoder les données du formulaire est également donnée dans les spécifications HTML ultérieures. Par exemple, recherchez les paragraphes pertinents sur application / x-www-form-urlencoded dans la spécification HTML 4.01, etc.
Voici un exemple de chaîne dans l'URL où la spécification HTML autorise le codage des espaces comme avantages: " http://example.com/over/there?name=foo+bar ". Ainsi, seulement après "?", Les espaces peuvent être remplacés par des points positifs . Dans d'autres cas, les espaces doivent être codés en% 20. Mais comme il est difficile de déterminer correctement le contexte, il est préférable de ne jamais coder les espaces en "+".
Je recommanderais de coder en pourcentage tous les caractères sauf "non réservé" défini dans RFC-3986, p.2.3
L'implémentation dépend du langage de programmation que vous avez choisi.
Si votre URL contient des caractères nationaux, commencez par les coder en UTF-8, puis codez en pourcentage le résultat.
la source