URLdagi bo'sh joy qachon +
ga kodlanadi va qachon %20
ga kodlanadi?
Bo'shliq belgisini kodlovchi URL: + yoki %20?
Javoblar (4)
Vikipediya dan (ta'kid va havola qo'shilgan):
HTML shakllariga kiritilgan ma'lumotlar yuborilganda, forma maydoni nomlari va qiymatlari kodlanadi va serverga HTTP so'rovi xabarida GET yoki POST usuli yoki tarixan elektron pochta orqali yuboriladi. Sukut bo'yicha ishlatiladigan kodlash umumiy URI foizli kodlash qoidalarining o'zgartirishlar soni yangi qatorni normallashtirish va bo'shliqlarni "%20" o'rniga "+" bilan almashtirish.Ma'lumotlarning MIME turi shu tarzda kodlangan. ilova/x-www-form-urlencoded bo'lib, u hozirda HTML va XForms spetsifikatsiyalarida aniqlangan (hali ham juda eskirgan).
Shunday qilib, real foizli kodlash %20
dan foydalanadi, URL manzillardagi shakl maʼlumotlari esa +
ishlatadigan oʻzgartirilgan shaklda. Shunday qilib, siz so'rovlar qatoridagi URL manzillarida ?
dan keyin faqat +
ni ko'rishingiz mumkin.
multipart/form-data
MIME kodlashdan foydalanadi; application/x-www-form-urlencoded
+
dan foydalanadi va to'g'ri kodlangan URI'lar %20
dan foydalanadi.
- person McDowell; 28.10.2009
http://www.bing.com/search?q=hello+world
va http://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
nomida bo'sh joy bo'lgan manbadir
- person William Entriken; 14.04.2013
+
ishlatiladigan so'rov qismida.
- person Joey; 28.04.2014
mailto:[email protected]?subject=I%20need%20help
. Agar siz buni + bilan sinab ko'rsangiz, elektron pochta bo'sh joy o'rniga +es bilan ochiladi.
- person Sygmoral; 19.02.2015
Bu chalkashlik, chunki URL manzillar hali ham "buzilgan".
Masalan, “http://www.google.com”ni oling. Bu URL manzili. URL yagona resurs lokatoridir va haqiqatan ham veb-sahifaga ko'rsatgichdir (ko'p hollarda). 1994-yilda birinchi spetsifikatsiyadan beri URL-manzillar juda aniq belgilangan tuzilishga ega.
Biz "http://www.google.com" URL manzili haqida batafsil ma'lumot olishimiz mumkin:
+---------------+-------------------+
| Part | Data |
+---------------+-------------------+
| Scheme | http |
| Host | www.google.com |
+---------------+-------------------+
Agar biz murakkabroq URL manzilini ko'rib chiqsak, masalan:
"https://bob:[email protected]:8080/file;p=1?q=2#third"
biz quyidagi ma'lumotlarni olishimiz mumkin:
+-------------------+---------------------+
| Part | Data |
+-------------------+---------------------+
| Scheme | https |
| User | bob |
| Password | bobby |
| Host | www.lunatech.com |
| Port | 8080 |
| Path | /file;p=1 |
| Path parameter | p=1 |
| Query | q=2 |
| Fragment | third |
+-------------------+---------------------+
https://bob:[email protected]:8080/file;p=1?q=2#third
\___/ \_/ \___/ \______________/ \__/\_______/ \_/ \___/
| | | | | | \_/ | |
Scheme User Password Host Port Path | | Fragment
\_____________________________/ | Query
| Path parameter
Authority
Har bir qism uchun ajratilgan belgilar har xil.
HTTP URL manzillari uchun yoʻl fragment qismidagi boʻsh joy “%20” ga kodlanishi kerak (yoʻq, mutlaqo “+” emas), yoʻl qismidagi “+” belgisi esa kodlanmagan holda qoldirilishi mumkin.
Endi so'rovlar qismida bo'shliqlar "+" (orqaga qarab moslik uchun: uni URI standartida qidirishga urinmang) yoki "% 20" ga kodlangan bo'lsa, "+" belgisi (bu noaniqlik natijasida) ) "% 2B" ga qochish kerak.
Bu "ko'k + och ko'k" qatorni yo'l va so'rov qismlarida boshqacha kodlash kerakligini anglatadi:
"http://example.com/blue+light%20blue?blue%2Blight+blue".
U yerdan toʻliq tuzilgan URL-manzilni kodlash URL tuzilmasi haqida sintaktik maʼlumotga ega boʻlmasdan turib imkonsiz degan xulosaga kelishingiz mumkin.
Bu quyidagilarga to'g'ri keladi:
Sizda ?
dan oldin %20
va keyin +
boʻlishi kerak.
key1=value1&key1=value2
dan foydalanadi, bunda kalitlar va qiymatlar encodeURIComponent
amal qiladigan qoidalar bilan kodlanadi, ammo AFAIK soʻrov qismining mazmuni butunlay ilovaga 100% boʻladi. Boshqa hollarda, u faqat birinchi #
ga o'tadi, rasmiy kodlash yo'q.
- person gman; 26.07.2018
?
dan oldin + emas, balki ?
dan keyin %20 dan foydalanishingiz kerak. shunchaki ta'mga bog'liq masala. Xudoning sevgisi uchun, odamlar, har doim foiz belgilariga asoslangan kodlashdan foydalaning va muhimroq narsalar uchun miya bo'shlig'ini tozalang.
- person nydame; 06.12.2020
%20
ni tavsiya qilaman.
Siz ularni qattiq kodlayapsizmi?
Biroq, bu tillar uchun juda mos emas. Adashmasam, PHPda urlencode()
bo'shliqlarni +
deb hisoblaydi, Python'da urlencode()
ularni %20
deb hisoblaydi.
Tahrirlash:
Men adashganga o'xshaydi. Python ning urlencode()
(hech bo'lmaganda 2.7.2 da) quote()
o'rniga quote_plus()
dan foydalanadi va shuning uchun bo'shliqlarni "+" sifatida kodlaydi. Bundan tashqari, W3C tavsiyasi bu erda "+" bo'lib ko'rinadi: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1
Va aslida, siz bo'shliqlarni kodlash uchun nimadan foydalanish haqida Python-ning o'z muammo trekerida ushbu qiziqarli bahsni kuzatishingiz mumkin: http://bugs.python.org/issue13866.
Tahrirlash №2:
Men tushunamanki, " " kodlashning eng keng tarqalgan usuli "+" shaklida, lekin shunchaki eslatma, bu faqat men bo'lishi mumkin, lekin men buni biroz chalkash deb bilaman:
import urllib
print(urllib.urlencode({' ' : '+ '})
>>> '+=%2B+'
URLEncoder.encode()
usuli uni +
ga ham o'zgartiradi.
- person рüффп; 24.10.2014
Boʻsh joy faqat URLning “application/x-www-form-urlencoded” kontent-turi kalit-qiymat juftlik soʻrovi qismida “+” bilan kodlanishi mumkin. Menimcha, bu MAY, MARJAT emas. Qolgan URL manzillarida u %20 sifatida kodlangan.
Menimcha, boʻsh joyni har doim “+” emas, balki URL soʻrov qismida ham kodlash maʼqulroq, chunki bu HTML spetsifikatsiyasi (RFC-1866) boʻsh joy belgilari “” sifatida kodlanishini belgilab bergan. +" "application/x-www-form-urlencoded" kontent turidagi kalit-qiymat juftliklarida (8.2.1-band. 1-kichik bandga qarang).
Shakl ma'lumotlarini kodlashning bu usuli keyingi HTML spetsifikatsiyalarida ham berilgan. Masalan, HTML 4.01 Spetsifikatsiyasida ilova/x-www-form-urlencoded haqidagi tegishli paragraflarni qidiring va hokazo.
Mana URL manzilidagi namuna qatori, bunda HTML spetsifikatsiyasi boʻshliqlarni ortiqcha sifatida kodlashga imkon beradi: "http://example.com/over/there?name=foo+bar". Demak,faqat “?” dan keyin boʻshliqlar plyuslar bilan almashtirilishi mumkin. Boshqa hollarda, bo'shliqlar% 20 ga kodlanishi kerak. Ammo kontekstni to'g'ri aniqlash qiyin bo'lgani uchun, bo'shliqlarni hech qachon "+" sifatida kodlamaslik eng yaxshi amaliyotdir.
RFC-3986, 2.3-betda belgilangan "saqlanmagan"dan tashqari barcha belgilarni foizli kodlashni tavsiya qilaman.
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
Amalga oshirish siz tanlagan dasturlash tiliga bog'liq.
Agar URL manzilingizda milliy belgilar mavjud bo'lsa, avval ularni UTF-8 ga kodlang va keyin natijani foizli kodlang.