% 5B và% 5D trong các yêu cầu POST là gì?


266

Tôi đang cố gắng viết một lớp Java để đăng nhập vào một trang web nhất định. Dữ liệu được gửi trong yêu cầu POST để đăng nhập là

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

Tôi rất tò mò những gì %5B%5Dphương tiện trong khóa đăng nhập người dùng .

Làm thế nào để tôi mã hóa những dữ liệu này?

Câu trả lời:


482

Theo câu trả lời này ở đây : str='foo%20%5B12%5D'mã hóa foo [12]:

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

Đây được gọi là mã hóa phần trăm và được sử dụng để mã hóa các ký tự đặc biệt trong các giá trị tham số url.

EDIT Nhân tiện , khi tôi đang đọc https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI#Des mô tả , nó chỉ xảy ra với tôi tại sao rất nhiều người thực hiện cùng một tìm kiếm. Xem ghi chú ở dưới cùng của trang:

Cũng lưu ý rằng nếu một người muốn theo RFC3986 gần đây hơn cho URL, hãy đặt dấu ngoặc vuông (dành cho IPv6) và do đó không được mã hóa khi tạo một cái gì đó có thể là một phần của URL (chẳng hạn như máy chủ lưu trữ), những điều sau đây có thể hữu ích.

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

Hy vọng rằng điều này sẽ giúp mọi người sắp xếp vấn đề của họ khi họ vấp phải câu hỏi này.


1
Cảm ơn bạn rất nhiều vì điều đó.
Rakib Ansary

@TrealCoder: vâng, cảm ơn bạn. Đây là tiếng anh kém của tôi Sửa nó ngay.
Boris Strandjev

liên kết RFC3986 của bạn bị hỏng
DudeOnRock




3

Để xem nhanh, bạn có thể phần trăm / giải mã bằng công cụ trực tuyến này .


1
Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. - Từ đánh giá
Peter

@Peter Cảm ơn, nhưng đây chỉ là một liên kết đến công cụ trực tuyến, có thể hữu ích ở đây. Vì các câu trả lời đã được cung cấp, không cần giải thích thêm.
Krzysztof Przygoda

1

Dữ liệu có thể đã được đăng ban đầu từ một biểu mẫu web trông hơi giống thế này (nhưng có lẽ phức tạp hơn nhiều):

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

Nếu phương thức là "nhận" thay vì "đăng", nhấp vào nút gửi sẽ đưa bạn đến một URL trông giống như sau:

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

hoặc là:

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

Máy chủ web ở đầu bên kia có thể sẽ lấy các tham số user[login]user[password]tham số, và biến chúng thành một userđối tượng có loginpasswordcác trường chứa các giá trị đó.


0

Không quan trọng nhất là tại sao các biểu tượng này xảy ra trong url. Xem https://www.php.net/manual/en/feft.parse-str.php#76792 , cụ thể:

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

các sản phẩm trên

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

và phương pháp THE để phân tách các vars truy vấn trong mảng (ít nhất là trong php).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.