¿Qué significa% 5B y% 5D en solicitudes POST?

266

Estoy tratando de escribir una clase Java para iniciar sesión en un sitio web determinado. Los datos enviados en la solicitud POST para iniciar sesión son

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

Tengo curiosidad por saber qué significa %5By %5Den el inicio de sesión de usuario clave .

¿Cómo codifico estos datos?

Rakib Ansary
fuente

Respuestas:

482

Según esta respuesta aquí : str='foo%20%5B12%5D'codifica foo [12]:

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

Esto se denomina codificación porcentual y se utiliza para codificar caracteres especiales en los valores de los parámetros de URL.

EDITAR Por cierto, mientras leía https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI#Description , se me ocurrió por qué tantas personas hacen la misma búsqueda. Vea la nota al final de la página:

También tenga en cuenta que si se desea seguir el RFC3986 más reciente para las URL, reservar los corchetes (para IPv6) y, por lo tanto, no codificarlos al formar algo que podría ser parte de una URL (como un host), lo siguiente puede ayudar.

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

Esperemos que esto ayude a las personas a resolver sus problemas cuando tropiecen con esta pregunta.

Boris Strandjev
fuente
1
Muchas gracias por eso.
Rakib Ansary
@TacticalCoder: sí, gracias. Este es mi pobre inglés. Corregiéndolo de inmediato.
Boris Strandjev
su enlace RFC3986 está roto
DudeOnRock
13

[]se reemplaza por %5B%5Den el momento de codificación URL.

Lalit Bhudiya
fuente
3

Para echar un vistazo rápido, puede hacer porcentajes de decodificación con esta herramienta en línea .

Krzysztof Przygoda
fuente
1
Si bien este enlace puede responder la pregunta, es mejor incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - De la opinión
Peter
@ Peter Gracias, pero esto es solo un enlace a la herramienta en línea, que puede ser útil aquí. Como las respuestas ya se proporcionaron, no hay necesidad de explicaciones adicionales.
Krzysztof Przygoda
1

Los datos probablemente se habrían publicado originalmente de un formulario web que se parece un poco a esto (pero probablemente mucho más 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>

Si el método fuera "obtener" en lugar de "publicar", al hacer clic en el botón de envío, accedería a una URL similar a esta:

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

o:

http://ejemplo.com/?user[loginfont>=username&user[passwordfont>=123456

El servidor web en el otro extremo es probable que tome el user[login]y user[password]parámetros, y convertirlos en un userobjeto con loginy passwordcampos que contienen esos valores.

mwfearnley
fuente
0

No menos importante es por qué estos símbolos aparecen en la URL. Ver https://www.php.net/manual/en/function.parse-str.php#76792 , específicamente:

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

lo anterior produce:

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

y cuál es EL método para separar variables de consulta en matrices (en php, al menos).

bbe
fuente