คู่มือ URL ENCODING
เข้ารหัสเฉพาะส่วนของ URL ที่เป็นข้อมูล ไม่ใช่ทั้งโครงสร้างโดยไม่จำเป็น
Percent-encoding แทนอักขระด้วย byte UTF-8 ในรูป %HH เพื่อให้ส่งผ่าน URL ได้อย่างปลอดภัย ควรแยก path, query key และ query value ก่อนเลือกสิ่งที่จะ encode
วิธีใช้งานทีละขั้นตอน
- 01
เลือกข้อความ
คัดลอกเฉพาะค่าที่ต้องอยู่ใน path หรือ query parameter
- 02
เข้ารหัสหนึ่งครั้ง
หลีกเลี่ยงการ encode ค่าเดิมซ้ำ เพราะเครื่องหมาย % จะกลายเป็น %25
- 03
ตรวจผลถอดรหัส
Decode แล้วเปรียบเทียบกับต้นฉบับ โดยเฉพาะช่องว่าง เครื่องหมาย + และอักขระภาษาไทย
รายละเอียดที่ควรตรวจสอบก่อนนำผลลัพธ์ไปใช้
- encodeURIComponent เหมาะกับค่าหนึ่งส่วน ส่วน URL ทั้งเส้นควรจัดการโครงสร้างแยกต่างหาก
- เครื่องหมาย + อาจหมายถึงช่องว่างใน form encoding แต่ไม่ใช่ทุกบริบท
- ตรวจการ encode ซ้ำเมื่อพบ %25 ตามด้วยเลขฐานสิบหก
แนวคิดและข้อจำกัดที่สำคัญ
Percent sequence แทน byte
%E0%B8... คือ byte UTF-8 ของอักขระ ไม่ได้แทนตัวอักษรทีละหนึ่งเสมอ โดยเฉพาะภาษาไทยและ emoji
ค่า URL กับ URL ทั้งเส้น
ควร encode query value หรือ path segment แยกกัน การ encode URL ทั้งเส้นอาจทำลาย : / ? & และ = ที่เป็นโครงสร้าง
คำถามที่พบบ่อย
ทำไมช่องว่างเป็น %20?
เพราะ byte ของช่องว่างคือ 0x20 ส่วนเครื่องหมาย + หมายถึงช่องว่างเฉพาะบางรูปแบบของ form encoding
ควร encode URL ทั้งเส้นไหม?
โดยทั่วไปไม่ ควร encode เฉพาะค่าหรือ segment แล้วประกอบกับโครงสร้าง URL
ทำไม decode แล้วผิดพลาดเมื่อมี %?
เครื่องหมาย % ต้องตามด้วยเลขฐานสิบหกสองหลัก ค่า % ที่หลงมาหรือ sequence ไม่ครบจึงถอดรหัสไม่ได้
JustUtils บันทึก URL หรือข้อความไหม?
ไม่ การ encode และ decode ทำในเบราว์เซอร์และไม่มีประวัติบนเซิร์ฟเวอร์