Anda tidak boleh menggunakan encodeURIComponent()
atau encodeURI()
. Anda harus menggunakan fixedEncodeURIComponent()
dan fixedEncodeURI()
, menurut Dokumentasi MDN.
Mengenai encodeURI()
...
Jika seseorang ingin mengikuti RFC3986 yang lebih baru untuk URL, yang membuat tanda kurung siku dicadangkan (untuk IPv6) dan dengan demikian tidak dikodekan saat membentuk sesuatu yang bisa menjadi bagian dari URL (seperti host), cuplikan kode berikut dapat membantu:
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}
Mengenai encodeURIComponent()
...
Agar lebih ketat dalam mematuhi RFC 3986 (yang menyimpan!, ', (,), Dan *), meskipun karakter ini tidak memiliki penggunaan pembatas URI yang diformalkan, berikut ini dapat digunakan dengan aman:
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
Lalu apa bedanya? fixedEncodeURI()
dan fixedEncodeURIComponent()
mengkonversi set yang sama nilai-nilai, tetapi fixedEncodeURIComponent()
juga mengubah set ini: +@?=:*#;,$&
. Set ini digunakan dalam GET
parameter ( &
,, +
dll.), Tag anchor ( #
), tag wildcard ( *
), bagian email / nama pengguna ( @
), dll.
Misalnya - Jika Anda menggunakan encodeURI()
, user@example.com/?email=me@home
tidak akan mengirim yang kedua dengan benar @
ke server, kecuali untuk browser Anda yang menangani kompatibilitas (seperti yang biasanya dilakukan Chrome).