Que signifient% 5B et% 5D dans les requêtes POST?

266

J'essaie d'écrire une classe Java pour me connecter à un certain site Web. Les données envoyées dans la demande POST de connexion sont

user%5Blogin%5D=username&user%5Bpassword%5D=123456

Je suis curieux de savoir ce %5Bque %5Dsignifie le et dans la connexion de l'utilisateur clé .

Comment encoder ces données?

Rakib Ansary
la source

Réponses:

482

Selon cette réponse ici : str='foo%20%5B12%5D'code foo [12]:

%20 is space
%5B is '['
and %5D is ']'

C'est ce qu'on appelle le codage en pourcentage et est utilisé pour coder les caractères spéciaux dans les valeurs des paramètres url.

EDIT Au fait, alors que je lisais https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI#Description , il m'est venu à l'esprit pourquoi tant de gens font la même recherche. Voir la note en bas de page:

Notez également que si l'on souhaite suivre la plus récente RFC3986 pour les URL, en faisant des crochets réservés (pour IPv6) et donc non codés lors de la formation de quelque chose qui pourrait faire partie d'une URL (comme un hôte), ce qui suit peut aider.

function fixedEncodeURI (str) {
    return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}

J'espère que cela aidera les gens à régler leurs problèmes lorsqu'ils tomberont sur cette question.

Boris Strandjev
la source
1
Merci beaucoup pour ça.
Rakib Ansary
@TacticalCoder: oui, merci. Ceci est mon pauvre anglais. Le corriger tout de suite.
Boris Strandjev
votre lien RFC3986 est rompu
DudeOnRock
30

Ils représentent [et ]. L'encodage est appelé "encodage URL" .

ruakh
la source
13

[]est remplacé par %5B%5Dau moment de l'encodage de l'URL.

Lalit Bhudiya
la source
10

Eh bien, c'est le codage d'URL habituel

Ils représentent donc [respectivement]

Voo
la source
3

Pour jeter un coup d'œil, vous pouvez centrer / décoder en utilisant cet outil en ligne .

Krzysztof Przygoda
la source
1
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change. - De l'avis
Peter
@Peter Merci, mais ce n'est qu'un lien vers l'outil en ligne, qui peut être utile ici. Étant donné que les réponses ont déjà été fournies, il n'y a pas besoin d'explications supplémentaires.
Krzysztof Przygoda
1

Les données auraient probablement été publiées à l'origine à partir d'un formulaire Web ressemblant un peu à ceci (mais probablement beaucoup plus compliqué):

<form action="http://example.com" method="post">

  User login    <input name="user[login]"    /><br />
  User password <input name="user[password]" /><br />

  <input type="submit" />
</form>

Si la méthode était "get" au lieu de "post", cliquer sur le bouton soumettre vous amènerait à une URL ressemblant un peu à ceci:

http://example.com/?user%5Blogin%5D=username&user%5Bpassword%5D=123456

ou:

http://example.com/?user}login

Le serveur Web à l'autre bout prendra vraisemblablement la user[login]et les user[password]paramètres, et en faire un userobjet avec loginet passwordchamps contenant ces valeurs.

mwfearnley
la source
0

La raison pour laquelle ces symboles apparaissent dans l'URL n'est pas moins importante. Voir https://www.php.net/manual/en/function.parse-str.php#76792 , en particulier:

parse_str('foo[]=1&foo[]=2&foo[]=3', $bar);

ce qui précède produit:

$bar = ['foo' => ['1', '2', '3'] ];

et quelle est LA méthode pour séparer les variables de requête dans les tableaux (en php, au moins).

bbe
la source