Bo'shliq belgisini kodlovchi URL: + yoki %20?

URLdagi bo'sh joy qachon + ga kodlanadi va qachon %20 ga kodlanadi?


person BC.    schedule 27.10.2009    source manba
comment
Bu savol bir nechta tilga oid savollar sifatida foydaliroq bo'ladi, to'g'rimi?   -  person squarecandy    schedule 11.01.2015
comment
Qachon bo'sh joyni ortiqcha (+) yoki %20 ga kodlash kerak?   -  person user    schedule 16.04.2017
comment
@userga siz bog'lagan savol keyinroq so'raldi, bu uni emas, balki aldashga aylandi.   -  person Warlike Chimpanzee    schedule 01.09.2017


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.

person Joey    schedule 27.10.2009
comment
Shunday qilib, + kodlash texnik jihatdan ko'p qismli/shakl-ma'lumotlarni kodlash bo'ladi, foiz kodlash esa dastur/x-www-form-urlencoded? - person BC.; 28.10.2009
comment
@BC: yo'q - 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
comment
Shunday qilib, so'rovlar qatoridagi URL manzillarida ? dan keyin faqat + belgisini ko'rishingiz mumkin. Bu past bahodir. Siz hech qachon URL-ning yo'l qismida + ni ko'rmasligingiz kerak, chunki u siz kutgan narsani qilmaydi (bo'sh joy). - person Adam Gent; 22.07.2011
comment
@McDowell sizning javobingiz, BC sharhi, Adam Gentning kiritishi bilan birga men uchun juda foydali bo'ldi - person Chris Marisic; 09.07.2012
comment
Salom, men ham sarosimaga tushdim, ba'zida kitobni + ishlatganini ko'rdim, lekin ba'zida% 20, foydalanuvchi shaklni yuborganida, forma bo'sh joyni qanday kodlaydi? qaysi xarakter bilan? Natija brauzerga bog'liqmi? - person Sam YC; 07.11.2012
comment
Shunday qilib, asosan: GET taqdim etish maqsadi 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
comment
Ma'lumotlar uris uris. Ushbu RFCni o'qib chiqqandan so'ng, men bo'sh joyni kodlashga + belgisi sifatida ruxsat berish kerakligini tushunish uchun yetarlicha aqlli emasligimni ishonch bilan ayta olaman. Ammo shuni aytishim mumkinki, agar siz %20 o'rniga + dan foydalansangiz, ma'lumotlar uri brauzerlarda ishlamaydi. - person Rob Murphy; 28.04.2014
comment
@Rob: Ehtimol, ma'lumotlar URI'larida bunga ruxsat berilmagan. Chunki aytib o'tilganidek, u faqat + ishlatiladigan so'rov qismida. - person Joey; 28.04.2014
comment
E-pochta havolalari uchun ? dan keyin + emas, balki 20% kerak bo'lishini unutmang. Masalan, 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
comment
Bu menga yordam berdi, stackoverflow.com /savollar/5572718/ - person zeros-and-ones; 19.12.2017
comment
Plyusdan foydalanishdagi muammo shundaki, agar siz ?search=The A+ School kabi bo'shliqlardan farqli ravishda ortiqcha belgilarini qabul qilmoqchi bo'lsangiz. - person Curtis; 01.08.2019

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.

Manba

person Matas Vaitkevicius    schedule 29.04.2015
comment
›› dan oldin sizda %20 bo'lishi kerak? va + keyin ahmoqona savol uchun kechirasiz. Men bir oz bilaman, bu hashtag parametridan keyin ishlatiladi? savol belgisi parametri. Bu qandaydir boshqacha bo'lsa-da, chunki # dan foydalanish sahifani qayta yuklamaydi. Lekin men # xeshtegidan keyin %20 va + belgilaridan foydalanishga harakat qildim va bu ishlamayapti. Qaysi biri # dan keyin ishlatilishi kerak? - person Philcyb; 22.12.2015
comment
@Philcyb Siz buni en.wikipedia.org/wiki/Percent-encoding o'qishni xohlashingiz mumkin. - person Matas Vaitkevicius; 23.12.2015
comment
So'rov qismi aslida rasmiy standartga egami? Men asosan bu qism dasturga xos deb o'yladim. Ilovalarning 99,99% 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
comment
Chalkashtiruvchi nomuvofiqlik eski buzilgan dizayn tufayli ekanligini ta'kidlaganingiz uchun tashakkur. - person wlnirvana; 09.04.2020
comment
Haqiqatan ham, men hozirgina LunaTech blogidagi maqolani ko‘rib chiqdim, siz muloyimlik bilan murojaat qilgan va uyga olib boruvchi xabar ko‘proq o‘xshaydi: Siz ? 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
comment
Voy odam. Aytishim kerakki, ASCII-dagi grafik ajoyib ko'rinadi. - person Miłosz Brzechczyn; 09.06.2021

%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+'
person Rui Vieira    schedule 27.10.2009
comment
Qattiq kodlash emas. Bo'shliqlarni o'z ichiga olgan URL manzillarim qanday ko'rinishini estetik nuqtai nazardan aniqlashga harakat qilaman. - person BC.; 28.10.2009
comment
Salom, men ham dovdirab qoldim, foydalanuvchi html formasini yuborganda, forma qanday qilib bo'sh joyni kodlaydi? qaysi xarakter bilan? Natija brauzerga bog'liqmi? - person Sam YC; 07.11.2012
comment
Va Java'dagi URLEncoder.encode() usuli uni + ga ham o'zgartiradi. - person рüффп; 24.10.2014
comment
Va keyin POST so'rovi tanasida kodlashni qanday davolash kerakligi haqida savol tug'iladi: Content-Type: application/x-www-form-urlencoded, bu erda parametrlar a=b&c=d ko'rinishida bo'ladi, lekin bunday emas. umuman URLda, faqat hujjatning asosiy qismi. Ular bu masalani chinakam chalkashtirib yuborishdi va aniq javoblarni topish juda qiyin. - person fyngyrz; 05.12.2014
comment
Perls uri_escape() ularni %20 deb hisoblaydi - person someuser; 08.02.2015
comment
%20 bilan bog'liq muammo shundaki, agar siz uni url-ga qo'shsangiz, serveringiz uni xuddi shu so'rov bilan yangi url-ga yo'naltiradi, u foizni kodlashi mumkin va sizda %20 o'rniga %2520 bo'ladi. - person Curtis; 01.08.2019

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.

person Maxim Masiutin    schedule 27.10.2016
comment
Agar so'ralgan manba HTML bo'lmasa, nima uchun kimdir HTML spetsifikatsiyasi haqida qayg'urishi kerak? Men HTML bilan javob bermaydigan ba'zi Web API-larda + ni ko'rdim, masalan. Siz pdf so'rayapsiz. Men ular 20% ishlatmasliklarini noto'g'ri deb hisoblayman. - person The incredible Jan; 12.10.2017
comment
@TheincredibleJan, men siz bilan roziman. Mening javobim shu haqida. - person Maxim Masiutin; 02.04.2018
comment
@MaximMasiutin Sizning javobingiz bu MAY, MUTILIK emas, deb aytilganda, siz qaysi spetsifikatsiyani nazarda tutyapsiz? Men shunga o'xshash xususiyatni topishga qiynalayapman. w3.org/TR /1999/REC-html401-19991224/interact/ "+" (so'rovlar bo'limida) yordamida spetsifikatsiyaning "kerak" bo'limida joylashgan. - person JosephH; 07.05.2019
comment
@JosephH - eslatmangiz uchun rahmat. Bu MAY haqidagi shaxsiy fikrim. Men postni tahrir qildim. Men shuni nazarda tutdimki, siz taklif qilgan HTML spetsifikatsiyasi + ni belgilaydi, ammo URL kontekstida boʻshliqlarni %20 sifatida kodlashga ruxsat beruvchi boshqa qoidalar ham qoʻllaniladi. - person Maxim Masiutin; 03.06.2019