% 5B และ% 5D ในคำขอ POST มีไว้เพื่ออะไร


266

ฉันพยายามเขียนคลาส Java เพื่อเข้าสู่เว็บไซต์บางแห่ง ข้อมูลที่ส่งในคำขอ POST เพื่อเข้าสู่ระบบคือ

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

ฉันอยากรู้ว่าสิ่งที่%5Bและ%5Dวิธีการในคีย์เข้าสู่ระบบของผู้ใช้

ฉันจะเข้ารหัสข้อมูลเหล่านี้ได้อย่างไร

คำตอบ:


482

เป็นต่อคำตอบนี้มากกว่าที่นี่ : str='foo%20%5B12%5D'ถอดรหัสfoo [12]:

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

สิ่งนี้เรียกว่าการเข้ารหัสเปอร์เซ็นต์และใช้ในการเข้ารหัสอักขระพิเศษในค่าพารามิเตอร์ url

แก้ไขโดยวิธีการที่ฉันอ่าน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
ขอบคุณมากสำหรับสิ่งนั้น
Rakib Ansary

@TacticalCoder: ใช่ขอบคุณ นี่คือภาษาอังกฤษที่ไม่ดีของฉัน แก้ไขทันที
Boris Strandjev

ลิงก์ RFC3986 ของคุณเสีย
DudeOnRock




3

หากต้องการดูอย่างรวดเร็วคุณสามารถเปอร์เซ็นต์ -en / decode โดยใช้เครื่องมือออนไลน์นี้


1
ในขณะที่ลิงค์นี้อาจตอบคำถามได้ดีกว่าที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง - จากการรีวิว
Peter

@ 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[login]=username&user[password]=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'] ];

และวิธีการแยกแบบสอบถาม vars ในอาร์เรย์คืออะไร (ใน php อย่างน้อย)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.