O que% 5B e% 5D nas solicitações POST representam?

266

Estou tentando escrever uma classe Java para fazer login em um determinado site. Os dados enviados na solicitação POST para efetuar login são

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

Estou curioso sobre o que significa %5Be %5Dno login do usuário principal .

Como codifico esses dados?

Rakib Ansary
fonte

Respostas:

482

De acordo com esta resposta aqui : str='foo%20%5B12%5D'codifica foo [12]:

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

Isso é chamado de porcentagem de codificação e é usado na codificação de caracteres especiais nos valores dos parâmetros de url.

EDIT Pela maneira como eu estava lendo https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI#Description , me ocorreu por que tantas pessoas fazem a mesma pesquisa. Veja a nota na parte inferior da página:

Observe também que, se desejar seguir o RFC3986 mais recente para URLs, deixando colchetes reservados (para IPv6) e, portanto, não codificados ao formar algo que possa fazer parte de um URL (como um host), o seguinte pode ajudar.

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

Espero que isso ajude as pessoas a resolver seus problemas quando se depararem com essa pergunta.

Boris Strandjev
fonte
1
Muito obrigado por isso.
Rakib Ansary
@TacticalCoder: sim, obrigado. Este é o meu inglês ruim. Corrigindo-o imediatamente.
Boris Strandjev 01/04
seu link RFC3986 está quebrado
DudeOnRock
30

Eles representam [e ]. A codificação é chamada "codificação de URL" .

ruakh
fonte
13

[]é substituído por %5B%5Dno momento da codificação do URL.

Lalit Bhudiya
fonte
10

Bem, é a codificação de URL usual

Então eles representam [, respectivamente]

Voo
fonte
3

Para dar uma olhada rápida, você pode porcentar-en / decodificar usando esta ferramenta online .

Krzysztof Przygoda
fonte
1
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada. - Do comentário
Peter
@ Peter Obrigado, mas este é apenas um link para a ferramenta online, que pode ser útil aqui. Como as respostas já foram fornecidas, não há necessidade de explicações adicionais.
Krzysztof Przygoda 21/03
1

Os dados provavelmente teriam sido postados originalmente em um formulário da Web parecido com este (mas provavelmente muito mais complicado):

<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>

Se o método fosse "get" em vez de "post", clicar no botão enviar levaria a um URL parecido com o seguinte:

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

ou:

http://example.com/?user[login}=username&user[password[=123456

O servidor web do outro lado provavelmente vai levar o user[login]e user[password]parâmetros, e transformá-los em um userobjeto com logine passwordcampos que contêm esses valores.

mwfearnley
fonte
0

Não menos importante é o motivo pelo qual esses símbolos ocorrem no URL. Consulte https://www.php.net/manual/en/function.parse-str.php#76792 , especificamente:

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

o acima produz:

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

e qual é o método para separar vars de consulta em matrizes (em php, pelo menos).

bbe
fonte