Kapan ruang dalam URL disandikan +
, dan kapan ruang itu disandikan %20
?
url
url-encoding
SM.
sumber
sumber
Jawaban:
Dari Wikipedia (penekanan dan tautan ditambahkan):
Jadi, persentase pengkodean yang sebenarnya menggunakan
%20
data formulir di URL adalah dalam bentuk yang dimodifikasi yang menggunakan+
. Jadi, Anda kemungkinan besar hanya melihat+
di URL dalam string kueri setelah?
.sumber
multipart/form-data
menggunakan penyandian MIME;application/x-www-form-urlencoded
menggunakan+
dan menggunakan URI yang disandikan dengan benar%20
.http://www.bing.com/search?q=hello+world
dan sumber daya dengan ruang dalam namahttp://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
mailto:[email protected]?subject=I%20need%20help
,. Jika Anda mencobanya dengan +, email akan terbuka dengan + bukan spasi.Kebingungan ini karena URL masih 'rusak' hingga hari ini.
Ini bermuara pada:
Anda harus memiliki
%20
sebelum?
dan+
sesudah.Sumber
sumber
key1=value1&key1=value2
mana kunci dan nilai dikodekan dengan aturan apa pun yangencodeURIComponent
mengikuti tetapi AFAIK konten bagian permintaan sepenuhnya 100% hingga aplikasi. Selain itu hanya pergi ke yang pertama#
tidak ada pengkodean resmi.Saya akan merekomendasikan
%20
.Apakah Anda mengkodekan mereka?
Ini tidak terlalu konsisten di semua bahasa. Jika saya tidak salah, dalam PHP
urlencode()
memperlakukan spasi sebagai+
sedangkan Pythonurlencode()
memperlakukannya sebagai%20
.EDIT:
Sepertinya saya salah. Python
urlencode()
(setidaknya dalam 2.7.2) menggunakanquote_plus()
alih-alihquote()
dan dengan demikian mengkodekan spasi sebagai "+". Tampaknya juga bahwa rekomendasi W3C adalah "+" seperti di sini: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1Dan faktanya, Anda dapat mengikuti debat menarik tentang pelacak masalah Python sendiri tentang apa yang harus digunakan untuk menyandikan spasi: http://bugs.python.org/issue13866 .
EDIT # 2:
Saya mengerti bahwa cara paling umum untuk menyandikan "" adalah sebagai "+", tetapi hanya sebuah catatan, mungkin hanya saya, tetapi saya merasa ini agak membingungkan:
sumber
URLEncoder.encode()
metode di Jawa mengubahnya+
juga.Ruang hanya dapat disandikan ke "+" di bagian "permintaan-jenis-tipe-nilai-pasangan" dari aplikasi / x-www-form-urlencoded "dari suatu URL. Menurut pendapat saya, ini MUNGKIN, bukan HARUS. Di sisa URL, itu dikodekan sebagai% 20.
Menurut pendapat saya, lebih baik untuk selalu menyandikan spasi sebagai% 20, bukan sebagai "+", bahkan di bagian permintaan URL, karena itu adalah spesifikasi HTML (RFC-1866) yang menentukan bahwa karakter spasi harus dikodekan sebagai " + "in" application / x-www-form-urlencoded "pasangan nilai kunci tipe konten (lihat paragraf 8.2.1. subparagraf 1.)
Cara pengkodean data formulir ini juga diberikan dalam spesifikasi HTML yang lebih baru. Misalnya, cari paragraf yang relevan tentang aplikasi / x-www-form-urlencoded di Spesifikasi HTML 4.01, dan seterusnya.
Berikut ini contoh string dalam URL di mana spesifikasi HTML memungkinkan ruang penyandian sebagai nilai tambah: " http://example.com/over/there?name=foo+bar ". Jadi, hanya setelah "?", Spasi dapat diganti dengan plus . Dalam kasus lain, spasi harus dikodekan ke% 20. Tapi karena sulit untuk menentukan konteks dengan benar, itu praktik terbaik untuk tidak pernah menyandikan spasi sebagai "+".
Saya akan merekomendasikan untuk meng-encode semua karakter kecuali "unreserved" yang didefinisikan dalam RFC-3986, hal.2.3
Implementasinya tergantung pada bahasa pemrograman yang Anda pilih.
Jika URL Anda berisi karakter nasional, pertama-tama kodekan untuk UTF-8 dan kemudian persen-kodekan hasilnya.
sumber