คุณไม่ควรจะใช้หรือencodeURIComponent()
encodeURI()
คุณควรใช้fixedEncodeURIComponent()
และfixedEncodeURI()
ตามเอกสาร MDN
คำนึงถึงencodeURI()
...
หากต้องการติดตาม RFC3986 ล่าสุดสำหรับ URL ซึ่งทำให้วงเล็บเหลี่ยมสงวนไว้ (สำหรับ IPv6) และไม่ได้เข้ารหัสเมื่อสร้างสิ่งที่อาจเป็นส่วนหนึ่งของ URL (เช่นโฮสต์) ข้อมูลโค้ดต่อไปนี้อาจช่วยได้:
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}
คำนึงถึงencodeURIComponent()
...
เพื่อให้เข้มงวดยิ่งขึ้นในการปฏิบัติตาม RFC 3986 (ซึ่งขอสงวน!, ', (,) และ *) แม้ว่าอักขระเหล่านี้จะไม่มีการใช้การกำหนด URI ที่เป็นทางการ แต่ก็สามารถใช้สิ่งต่อไปนี้ได้อย่างปลอดภัย:
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
แล้วอะไรคือความแตกต่าง? fixedEncodeURI()
และfixedEncodeURIComponent()
แปลงชุดเดียวกันของค่า แต่ยังแปลงชุดนี้:fixedEncodeURIComponent()
+@?=:*#;,$&
ชุดนี้จะใช้ในGET
พารามิเตอร์ ( &
, +
ฯลฯ ) สมอแท็ก ( #
), แท็กตัวแทน ( *
), ชิ้นส่วนอีเมล / ชื่อผู้ใช้ ( @
) ฯลฯ ..
ยกตัวอย่างเช่น -ถ้าคุณใช้encodeURI()
, user@example.com/?email=me@home
จะไม่ถูกต้องส่งที่สอง@
ไปยังเซิร์ฟเวอร์ยกเว้นสำหรับเบราว์เซอร์ของคุณจัดการการทำงานร่วมกัน (เหมือน Chrome ธรรมชาติไม่บ่อย)