Co oznaczają% 5B i% 5D w żądaniach POST?

266

Próbuję napisać klasę Java, aby zalogować się do określonej witryny. Dane wysłane w żądaniu POST w celu zalogowania to

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

Jestem ciekawy, co oznacza %5Bi %5Dw logowaniu kluczowego użytkownika .

Jak zakodować te dane?

Rakib Ansary
źródło

Odpowiedzi:

482

Zgodnie z odpowiedzią tutaj : str='foo%20%5B12%5D'koduje foo [12]:

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

Nazywa się to kodowaniem procentowym i jest używane do kodowania znaków specjalnych w wartościach parametrów adresu URL.

EDYCJA Nawiasem mówiąc, kiedy czytałem https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI#Description , przyszło mi do głowy, dlaczego tak wiele osób dokonuje tego samego wyszukiwania. Zobacz notatkę na dole strony:

Zauważ również, że jeśli ktoś chce postępować zgodnie z najnowszą wersją RFC3986 dla adresów URL, rezerwując nawiasy kwadratowe (dla IPv6), a tym samym nie zakodowane przy tworzeniu czegoś, co może być częścią adresu URL (np. Hosta), poniższe mogą pomóc.

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

Mam nadzieję, że pomoże to ludziom rozwiązać problemy, gdy natkną się na to pytanie.

Boris Strandjev
źródło
1
Dziękuję ci bardzo za to.
Rakib Ansary
@TacticalCoder: tak, dziękuję. To jest mój słaby angielski. Korekta od razu.
Boris Strandjev
twój link RFC3986 jest uszkodzony
DudeOnRock
13

[]jest zastępowany przez %5B%5Dw czasie kodowania adresu URL.

Lalit Bhudiya
źródło
3

Aby rzucić okiem, możesz procent-en / dekodować za pomocą tego narzędzia online .

Krzysztof Przygoda
źródło
1
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
Peter
@ Peter Dzięki, ale to tylko link do narzędzia online, które może być pomocne tutaj. Ponieważ odpowiedzi już zostały udzielone, nie ma potrzeby dalszych wyjaśnień.
Krzysztof Przygoda
1

Dane prawdopodobnie zostałyby pierwotnie opublikowane z formularza internetowego wyglądającego trochę tak (ale prawdopodobnie znacznie bardziej skomplikowanego):

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

Gdyby metodą było „pobierz” zamiast „opublikuj”, kliknięcie przycisku przesyłania doprowadziłoby cię do adresu URL wyglądającego trochę tak:

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

lub:

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

Serwer WWW na drugim końcu będzie prawdopodobnie podjąć user[login]i user[password]parametry, i uczynić je do userobiektu z logini passwordpól zawierających te wartości.

mwfearnley
źródło
0

Ważne jest również, dlaczego te symbole występują w adresie URL. Zobacz https://www.php.net/manual/en/function.parse-str.php#76792 , w szczególności:

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

powyższe powoduje:

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

i jaka jest metoda oddzielania zmiennych zapytań w tablicach (przynajmniej w php).

bbe
źródło