ตัวเลือกขั้นสูง
แปลง + เป็นช่องว่าง
เมื่อเปิดใช้งาน อักขระ + จะถูกแปลงเป็นช่องว่าง สิ่งนี้มีประโยชน์เมื่อถอดรหัสพารามิเตอร์การค้นหา
โหมดสด
เมื่อเปิดใช้งาน ข้อความจะถูกถอดรหัสโดยอัตโนมัติขณะที่คุณพิมพ์
ตัวเลือกเหล่านี้ช่วยให้คุณควบคุมวิธีการถอดรหัสอักขระที่เข้ารหัสใน URL ของคุณ
การถอดรหัส URL คืออะไร?
การถอดรหัส URL จะย้อนการเข้ารหัสเปอร์เซ็นต์: อ่านลำดับ %XX ใน URL ที่เข้ารหัสแล้วแปลงกลับเป็นอักขระที่แสดงถึง นั่นคือวิธีที่คุณได้รับ query string, ค่าฟอร์ม หรือ path segment ที่อ่านได้จาก URL ที่เบราว์เซอร์, API หรือ log line ส่งมาให้คุณในรูปแบบเข้ารหัส
การถอดรหัส URL ทำงานอย่างไร?
การถอดรหัส URL ทำตามกระบวนการเฉพาะเพื่อแปลงลำดับที่เข้ารหัสแบบเปอร์เซ็นต์กลับเป็นอักขระดั้งเดิม:
- สแกนสตริงอินพุตเพื่อหาลำดับ escape ที่เข้ารหัสแบบเปอร์เซ็นต์ (%XX)
- แต่ละ %XX จะถูกแปลงจากเลขฐานสิบหกสองหลักกลับเป็นค่าไบต์ดั้งเดิม
- ไบต์ที่ถอดรหัสต่อเนื่องกันจะถูกประกอบกลับเป็นอักขระ UTF-8 (ลำดับหลายไบต์จะกลายเป็นอักขระเดียว)
- ในบริบทของสตริงการค้นหา + จะถูกถอดรหัสเป็นช่องว่าง (application/x-www-form-urlencoded) ในขณะที่ %2B ยังคงเป็น + ตามตัวอักษร
- อักขระที่ไม่สงวนและข้อความที่ถอดรหัสแล้วจะผ่านไปโดยไม่เปลี่ยนแปลง
ทำไมจึงใช้ตัวถอดรหัส URL?
- ผลลัพธ์ที่อ่านได้: แปลง %20, %40 และ %3D กลับเป็นช่องว่าง, @ และ = เพื่อให้คุณอ่านสิ่งที่ URL บอกได้จริง ๆ
- ข้อความนานาชาติ: สร้างอักขระที่มีสำเนียงและ non-ASCII กลับจากลำดับ byte UTF-8 ของพวกมัน เพื่อให้ %C3%A9 อ่านเป็น é อีกครั้ง
- การดีบัก: ตรวจสอบค่าจริงใน query string, OAuth redirect หรือ webhook payload ก่อนที่คุณจะดำเนินการ
- ถูกต้องตามมาตรฐาน: ถอดรหัสตาม RFC 3986 กฎเดียวกับที่เบราว์เซอร์และเซิร์ฟเวอร์ใช้ เพื่อให้คุณเห็นสิ่งที่พวกมันเห็น
การใช้งานทั่วไปของการถอดรหัส URL มีอะไรบ้าง?
การถอดรหัส URL จำเป็นในหลายสถานการณ์การพัฒนาเว็บ:
- การส่งฟอร์ม: อ่านค่าฟิลด์เดิมกลับมาจากข้อมูล application/x-www-form-urlencoded ทั้ง GET และ POST
- การพัฒนา API: แกะ path และ query parameters ที่ถูกเข้ารหัสแบบเปอร์เซ็นต์ที่มาถึง API endpoint
- ระบบไฟล์: กู้คืนเส้นทางและชื่อไฟล์ที่ถูกเข้ารหัสแบบเปอร์เซ็นต์เพื่อส่งผ่าน URL
- การดีบักลิงก์: ถอดรหัส URL ที่แชร์หรือบันทึกไว้เพื่อดูอักขระพิเศษและข้อความระหว่างประเทศที่พวกมันมี
ตัวอย่างการถอดรหัส URL มีลักษณะอย่างไร?
ต่อไปนี้คือตัวอย่างทั่วไปของการถอดรหัส URL: %20 (หรือ +) กลายเป็นช่องว่าง, %40 กลายเป็น @, %23 กลายเป็น #, %26 กลายเป็น & และ %3D กลายเป็น = ลำดับ UTF-8 อย่าง %C3%A9 กลายเป็นอักขระระหว่างประเทศ é
การเข้ารหัสแบบเปอร์เซ็นต์คืออะไร?
การเข้ารหัสแบบเปอร์เซ็นต์คือกลไกที่กำหนดโดย RFC 3986 §2.1 สำหรับแสดงอักขระที่ไม่ปลอดภัยหรือเป็นอักขระสงวนภายใน URI กฎเป็นแบบกลไก: ทุกไบต์ที่ไม่สามารถปรากฏตามตัวอักษรได้ จะถูกเขียนเป็นเครื่องหมายเปอร์เซ็นต์ตามด้วยเลขฐานสิบหกสองหลัก — รูป %XX — โดย XX คือค่าของไบต์ อักขระที่ไม่ใช่ ASCII เช่น é จะถูกเข้ารหัสเป็นลำดับไบต์ UTF-8 ก่อน จากนั้นไบต์แต่ละไบต์จะถูกเข้ารหัสแบบเปอร์เซ็นต์ทีละตัว นักพัฒนาพบสิ่งนี้แทบทุกวัน: ใน query string, การส่งฟอร์ม, URL callback ของ OAuth, พารามิเตอร์ path ของ REST API, และทุกที่ที่ URL ต้องนำพาเครื่องหมายวรรคตอน เว้นวรรค หรืออักขระนอกเซตที่ไม่สงวน A–Z a–z 0–9 - _ . ~
การถอดรหัส %C3%A9 ให้กลายเป็น é ทำงานอย่างไรกันแน่?
ลองดู query string ที่เข้ารหัสไว้ ?q=caf%C3%A9&lang=fr การถอดรหัสจะได้ ?q=café&lang=fr นี่คือคำอธิบายไบต์ต่อไบต์:
- อินพุต:
?q=caf%C3%A9&lang=fr - เอาต์พุต:
?q=café&lang=fr
%C3→ ไบต์0xC3(เลขฐานสอง11000011) — ไบต์นำของลำดับ UTF-8 ขนาด 2 ไบต์%A9→ ไบต์0xA9(เลขฐานสอง10101001) — ไบต์ต่อเนื่อง รวมกันแล้วC3 A9คือการเข้ารหัส UTF-8 ของ U+00E9 ซึ่งก็คือé- อักขระ
?,=และ&ถูกปล่อยไว้คงเดิม เพราะเป็นอักขระเชิงโครงสร้าง — มันคั่น query และคู่ key/value ส่วนcafตามตัวอักษรก็ผ่านไปโดยไม่เปลี่ยน เพราะตัวอักษร ASCII ตัวพิมพ์เล็กอยู่ในเซตที่ไม่สงวน
decodeURIComponent กับ decodeURI ต่างกันอย่างไร?
JavaScript มีตัวถอดรหัส built-in สองตัว และการสับสนระหว่างทั้งสองคือบักการจัดการ URL ที่พบบ่อยที่สุดอย่างหนึ่ง:
decodeURIComponent(str)ถอดรหัสทุกลำดับที่เข้ารหัสแบบเปอร์เซ็นต์ รวมถึงอักขระสงวนอย่าง&,=,?,/และ#ใช้กับค่าเดี่ยว ๆ ของ query string หรือ segment ของ path เท่านั้น — อย่าใช้กับ URL ทั้งก้อนเด็ดขาดdecodeURI(str)ระมัดระวังโดยตั้งใจ: มันข้ามอักขระสงวน ส่งให้มัน%26จะได้สตริงตามตัวอักษร%26กลับมา ไม่ใช่&มันมีไว้สำหรับ URI ทั้งก้อนที่คุณต้องการให้โครงสร้างอยู่รอดในการเดินทางไป-กลับ
กฎจากประสบการณ์: ถ้าสตริงเป็นแค่ส่วนหนึ่งของ URL (พารามิเตอร์เดี่ยว, fragment, ชื่อไฟล์ที่เข้ารหัส) ให้ใช้ decodeURIComponent เครื่องมือนี้ทำงานเหมือน decodeURIComponent — ทุกลำดับ %XX ในอินพุตของคุณจะถูกถอดรหัส รวมถึงอักขระสงวน
การถอดรหัส URL คือวิธีที่คุณอ่านสิ่งที่มันมีจริง ๆ วาง encoded string ด้านบนแล้วลำดับ %XX ทุกตัวจะกลับเป็นอักขระของมันในเบราว์เซอร์ของคุณ เพื่อให้คุณดีบัก query parameter, ตรวจสอบ OAuth redirect หรือกู้คืนชื่อไฟล์ที่มีสำเนียงโดยไม่ต้องส่งอะไรไปยังเซิร์ฟเวอร์