Manakah dari dua metode ini yang harus digunakan untuk menyandikan URL?
javascript
Aditya Shukla
sumber
sumber
encodeURI
tidak akan menyandikan/
jadi:encodeURIComponent("ac/dc")
=>ac%2Fdc
danencodeURI("ac/dc")
=>ac/dc
"encodeURIComponent() and encodeURI() encode a URI by replacing URL reserved characters with their UTF-8 encoding....They differ because encodeURI does not encode queryString or hash values...URLs do not allow many special characters, like spaces or slashes. However these special characters are part of life, so URL encoding was invented."
SumberencodeURIComponent differs from encodeURI as follows
di: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Jawaban:
Itu tergantung pada apa yang sebenarnya ingin Anda lakukan.
encodeURI mengasumsikan bahwa input adalah URI lengkap yang mungkin memiliki beberapa karakter yang perlu dikodekan di dalamnya.
encodeURIComponent akan menyandikan semuanya dengan makna khusus, jadi Anda menggunakannya untuk komponen URI seperti
sumber
Jika Anda menyandikan string untuk dimasukkan ke dalam komponen URL (parameter querystring), Anda harus menelepon
encodeURIComponent
.Jika Anda menyandikan URL yang ada, hubungi
encodeURI
.sumber
xkr.us memiliki diskusi yang hebat, dengan contoh-contoh. Mengutip ringkasan mereka:
sumber
encodeURI
gagal jika Anda mencoba mengonversi nama file ke URL dan nama file ada#
di dalamnyaBerikut ini ringkasannya.
escape () tidak akan menyandikan @ * _ + -. /
Jangan gunakan itu.
encodeURI () tidak akan menyandikan AZ az 0-9; , /? : @ & = + $ - _. ! ~ * '() #
Gunakan ketika input Anda adalah URL lengkap seperti ' https://searchexample.com/search?q=wiki '
const queryStr = encodeURIComponent(someString)
sumber
encodeURIComponent (): mengasumsikan bahwa argumennya adalah sebagian (seperti protokol, nama host, jalur, atau string kueri) dari URI. Karenanya ia lolos dari karakter tanda baca yang digunakan untuk memisahkan bagian-bagian dari URI.
encodeURI (): digunakan untuk menyandikan url yang ada
sumber
Perbedaan antara
encodeURI
danencodeURIComponent
:encodeURIComponent(value)
terutama digunakan untuk menyandikan nilai parameter queryString, dan itu mengkodekan setiap karakter yang berlaku divalue
.encodeURI
mengabaikan awalan protokol (http://
) dan nama domain.Dalam kasus yang sangat, sangat jarang, ketika Anda ingin menerapkan pengkodean manual untuk menyandikan karakter tambahan (meskipun mereka tidak perlu dikodekan dalam kasus-kasus tertentu) seperti:,
! *
maka Anda dapat menggunakan:( sumber )
sumber
Jawaban lain menjelaskan tujuan. Berikut adalah karakter yang akan dikonversi oleh setiap fungsi :
Semua karakter di atas dikonversi ke kode persen-heksadesimal. Spasi ke
%20
, persen ke%25
, dll. Karakter di bawah melewati tidak berubah.Berikut adalah karakter-karakter yang fungsi-fungsi TIDAK akan dikonversi :
sumber
Sebagai aturan umum digunakan
encodeURIComponent
. Jangan takut nama panjang berpikir itu lebih spesifik dalam penggunaannya, bagi saya itu metode yang lebih umum digunakan. Juga jangan terseret ke dalam menggunakan encodeURI karena Anda mengujinya dan tampaknya menjadi pengkodean dengan benar, itu mungkin bukan apa yang Anda maksudkan untuk digunakan dan meskipun tes sederhana Anda menggunakan "Fred" dalam bidang nama pertama berhasil, Anda akan menemukan nanti ketika Anda menggunakan teks yang lebih canggih seperti menambahkan ampersand atau tagar itu akan gagal. Anda dapat melihat jawaban lain untuk alasan mengapa ini.sumber