การเข้ารหัส URL คืออะไร? คำอธิบายฉบับสมบูรณ์ของ Percent-encoding
ตอบด่วน
URL encoding (percent-encoding) แทนอักขระ unsafe ใน URL ด้วย % ตามด้วยเลข hex สองหลัก เช่น ช่องว่างเป็น %20, & เป็น %26 ทำให้ URL ส่งได้ไม่กำกวาม ใช้ URL Encoder และ Decoder ฟรีของเรา
การแนะนำ
URL encoding (percent-encoding) เป็นกลไกเข้ารหัสอักขระพิเศษใน URL เพื่อส่งผ่านอินเทอร์เน็ตได้ปลอดภัย URL มี ASCII จำกัด —ตัวอักษร ตัวเลข และ reserved บางตัว อักขระอื่น (ช่องว่าง, quote, ไม่ใช่ ASCII) ต้อง encode เป็น % ตามด้วยเลข hex สองหลัก URL encoding กำหนดโดย RFC 3986
ทีละขั้นตอน
-
ทำความเข้าใจว่าอักขระตัวไหนที่ต้องเข้ารหัส
อักขระที่ไม่ได้สงวนไว้ (A-Z, a-z, 0-9, -, _, ., ~) ไม่จำเป็นต้องเข้ารหัส อักขระที่สงวนไว้ (:, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =) มีความหมายพิเศษใน URLs และควรเข้ารหัสเมื่อใช้เป็นข้อมูล อักขระอื่นๆ ทั้งหมด (ช่องว่าง เครื่องหมายคำพูด ไม่ใช่ ASCII) จะต้องได้รับการเข้ารหัส
-
เรียนรู้กลไกการเข้ารหัส
อักขระแต่ละตัวที่ต้องการการเข้ารหัสจะถูกแปลงเป็นลำดับไบต์ UTF-8 จากนั้นแต่ละไบต์จะแสดงเป็น %XX โดยที่ XX คือค่าฐานสิบหก ช่องว่าง (0x20) → %20 อักขระที่ไม่ใช่ ASCII 'é' (UTF-8: 0xC3 0xA9) → %C3%A9
-
แยกแยะความแตกต่าง encodeURI กับ encodeURIComponent
encodeURI() เข้ารหัส URL แบบเต็ม แต่คงอักขระสงวนไว้ (:/?&=) ซึ่งเป็นส่วนหนึ่งของโครงสร้าง URL encodeURIComponent() เข้ารหัสทุกอย่างยกเว้นอักขระที่ไม่ได้สงวนไว้ - ใช้สำหรับค่าพารามิเตอร์การสืบค้นโดยที่อักขระที่สงวนไว้เป็นข้อมูล ไม่ใช่โครงสร้าง
-
ถอดรหัสที่เข้ารหัสเป็นเปอร์เซ็นต์ URLs
การถอดรหัสจะกลับการเข้ารหัส: %20 → ช่องว่าง, %C3%A9 → é ใช้ decodeURI() สำหรับ URLs แบบเต็ม และ decodeURIComponent() สำหรับค่าพารามิเตอร์การค้นหา ข้อผิดพลาดในการส่งลำดับการหลีกไม่ถูกต้อง (เช่น %ZZ)
ตัวอย่าง
เข้ารหัสช่องว่าง
ป้อนข้อมูล: hello world
เอาท์พุต: hello%20world
เข้ารหัสข้อความที่ไม่ใช่ ASCII
ป้อนข้อมูล: café
เอาท์พุต: caf%C3%A9
เข้ารหัสค่าพารามิเตอร์การค้นหา
ป้อนข้อมูล: name=John Doe & Co.
เอาท์พุต: name%3DJohn%20Doe%20%26%20Co.
ปัญหาทั่วไป
- เข้ารหัส URL ทั้งหมด เมื่อเฉพาะค่าที่ต้องการเข้ารหัส —เข้ารหัสค่าพารามิเตอร์การค้นหา ไม่ใช่โครงสร้าง URL (://?&=)
- การเข้ารหัสสองครั้ง —หาก URL ถูกเข้ารหัสแล้ว การเข้ารหัสอีกครั้งจะสร้าง %2520 แทนที่จะเป็น %20 ถอดรหัสก่อนหากไม่แน่ใจว่าเข้ารหัสแล้วหรือไม่
- การใช้ encodeURI กับ encodeURIComponent ไม่ถูกต้อง —encodeURI จะรักษาอักขระโครงสร้าง URL encodeURIComponent เข้ารหัสพวกมัน ใช้อย่างหลังสำหรับค่าพารามิเตอร์การค้นหา
- ลำดับหลีกไม่ถูกต้อง —%ZZ หรือ % เดียวที่ตอนท้ายนั้นไม่ถูกต้อง และจะส่งข้อผิดพลาดเมื่อถอดรหัส
เคล็ดลับ
- เข้ารหัสค่าพารามิเตอร์การค้นหาที่อาจมีการเว้นวรรค อักขระพิเศษ หรืออินพุตของผู้ใช้เสมอเพื่อป้องกันการแทรก URL
- ใช้ encodeURIComponent() สำหรับค่าพารามิเตอร์การค้นหา และใช้ encodeURI() สำหรับ URLs แบบเต็มที่ต้องการเข้ารหัสอักขระที่ไม่ปลอดภัย
- การเข้ารหัส URL ไม่ใช่การเข้ารหัส ใครๆ ก็สามารถถอดรหัสได้ อย่าใช้มันเพื่อซ่อนข้อมูลที่ละเอียดอ่อน
- ใช้ URL ตัวเข้ารหัสและตัวถอดรหัสของเราเพื่อการแปลงแบบส่วนตัวทันทีในเบราว์เซอร์ของคุณ