Що означає% 5B та% 5D у POST-запитах?


266

Я намагаюся написати клас Java для входу на певний веб-сайт. Дані, що надсилаються у запиті POST для входу, є

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

Мені цікаво, що означає %5Bі що %5Dозначає ключовий логін користувача .

Як кодувати ці дані?

Відповіді:


482

Відповідно до цієї відповіді тут : str='foo%20%5B12%5D'encodes foo [12]:

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

Це називається відсотковим кодуванням і використовується при кодуванні спеціальних символів у значеннях параметра url.

EDIT До речі, коли я читав https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI#Description , мені просто прийшло в голову, чому так багато людей здійснюють той самий пошук. Дивіться примітку внизу сторінки:

Також зауважте, що якщо хочеться слідувати останнім RFC3986 за URL- адресами , роблячи квадратні дужки зарезервованими (для IPv6) і, таким чином, не кодуватися, формуючи щось, що може бути частиною URL-адреси (наприклад, хост), наступне може допомогти.

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

Сподіваємось, це допоможе людям розібратися у своїх проблемах, коли вони натрапляють на це питання.


1
Дуже дякую за це.
Ракіб Ансарій

@TacticalCoder: так, дякую. Це моя бідна англійська. Виправляючи це відразу.
Борис Страндєв

ваше посилання RFC3986 розірвано
DudeOnRock




3

Щоб швидко переглянути, ви можете відсотків / декодувати за допомогою цього інструменту в Інтернеті .


1
Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться. - З огляду
Петро

@Peter Дякую, але це лише посилання на онлайн-інструмент, який тут може бути корисним. Оскільки відповіді вже були надані, немає необхідності в подальших поясненнях.
Krzysztof Przygoda

1

Дані, ймовірно, були розміщені спочатку з веб-форми, яка виглядає приблизно так (але, ймовірно, набагато складніше):

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

Якщо метод "отримати" замість "розмістити", натискання кнопки "Надіслати" переведе вас до такої URL-адреси, яка виглядає приблизно так:

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

або:

http://example.com/?user evidenceloginSense=username&user evidencepasswordSense=123456

Веб - сервер на іншому кінці, швидше за все , взяти user[login]і user[password]параметри, і перетворити їх в userоб'єкт з loginі passwordполів , що містять ці значення.


0

Не менш важливо, чому ці символи виникають в URL-адресі. Дивіться https://www.php.net/manual/en/function.parse-str.php#76792 , зокрема:

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

вищезгадане виробляє:

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

і який метод розділення запитів на масиви (принаймні в php).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.