Dari entri Codex untuk Validasi Data: URL :
esc_url( $url, (array) $protocols =
null )
(sejak 2,8)
Selalu gunakan esc_url saat membersihkan URL (dalam simpul teks, simpul atribut atau tempat lain). Tolak URL yang tidak memiliki salah satu protokol yang masuk daftar putih yang disediakan (default ke http, https, ftp, ftps, mailto, berita, irc, gopher, nntp, feed, dan telnet), menghilangkan karakter yang tidak valid, dan menghilangkan karakter berbahaya. Tidak digunakan lagi sejak 3.0: clean_url () Fungsi ini menyandikan karakter sebagai entitas HTML: gunakan saat membuat dokumen (X) HTML atau XML. Mengkodekan ampersand (&) dan tanda kutip tunggal (') sebagai referensi entitas numerik (&,').
esc_url_raw( $url, (array) $protocols
= null )
(sejak 2,8)
Untuk memasukkan URL ke dalam basis data. Fungsi ini tidak menyandikan karakter sebagai entitas HTML: gunakan ketika menyimpan URL atau dalam kasus lain di mana Anda memerlukan URL yang tidak dikodekan. Fungsionalitas ini dapat direplikasi dalam fungsi clean_url yang lama dengan menetapkan $ context ke db.
Jadi, perbedaan utama tampaknya:
esc_url()
mengkodekan entitas HTML, sementara esc_url_raw()
tidak
esc_url()
ditujukan untuk
output , sementara esc_url_raw()
ditujukan untuk penyimpanan basis data
EDIT:
Karena Anda salah satu pengkodean (atau menyimpan / menyimpan secara terpisah) URL sebenarnya dari string kueri, dan kemudian menambahkan string kueri melalui [add_query_arg()][2]
, mungkinkah lebih baik melepaskan diri dari string kueri yang ditambahkan melalui esc_js()
, daripada esc_url()
?
Sebagai contoh:
add_query_arg( esc_js( 'apples' ), esc_js( '420' ), $myurl )
esc_url()
tidak berfungsi dengan baik ketika Anda memiliki argumen permintaan di URL yang ingin Anda