← Barcha vositalar

URL Kodlash va Dekodlash

URL va matnlarni brauzeringizda foiz-kodlash usulida kodlang va dekodlang. Zaxira belgilar, encodeURI va encodeURIComponent qanday ishlashini bilib oling — lokal tarzda amalga oshiriladi.

URL kodlash va dekodlash — dasturchilar uchun tushuntirish

URL manziliga bo'sh joy, kirill so'zi yoki manzilning o'ziga emas, balki ma'lumotingizga tegishli ampersand belgisini kiriting — va nimadir buzilishi kerak. Internet faqat kichik, oldindan taxmin qilinadigan ASCII belgilar to'plami uchun xavfsiz uzatishni kafolatlaydi. Qolgan hamma narsa yo'nalishlar, serverlar va brauzerlar birgalikda kelishib olgan formatga o'rab qo'yilishi kerak. Bu format — protsent-kodlash, ko'proq URL kodlash nomi bilan tanilgan, va ushbu sahifa matnni to'g'ridan-to'g'ri brauzeringizda ikkala yo'nalishda ham aylantirishga imkon beradi.

To'q indigo fonda porlab turgan URL yo'li protsent bilan kodlangan o'n oltilik belgilarga aylanmoqda
URL yo'li xavfsiz protsent-kodlangan uchliklarga aylanmoqda.

Protsent-kodlash aslida nima

Qoida mexanik va tushunish oson. So'zma-so'z paydo bo'lolmaydigan har qanday belgi % belgisi va o'sha belgining bayt qiymatini bildiruvchi ikkita o'n oltilik raqam bilan almashtiriladi. Bo'sh joy %20ga aylanadi. Plyus belgisi %2Bga aylanadi. Reshetka belgisi %23ga aylanadi. Bir belgi bir necha baytga mos kelganda, UTF-8'da ko'pchilik ASCII bo'lmagan matn shunday bo'ladi, siz shunchaki bir nechta uchlikni qatorma-qator olasiz: yevro belgisi %E2%82%ACga aylanadi. Dekodlash bu jarayonni teskari yo'naltiradi, har bir uchlikni asl baytga qaytarib o'qiydi.

Bu qoida URI spetsifikatsiyasida (RFC 3986) belgilangan va u qasddan zerikarli qilib qo'yilgan. Zerikarli bo'lishi — asosiy maqsad. Sayyoradagi har bir yaxshi ishlaydigan HTTP mijoz va server bir xil qoidalarni amalga oshiradi, shuning uchun bir joyda to'g'ri kodlangan havola boshqa har qanday joyga buzilmasdan yetib boradi.

Nega u mavjud bo'lishi kerak

URL'lar juda farqli vazifalarga ega ikki turdagi belgilarni tashiydi. Zahiralangan belgilar, masalan /, ?, #, &, = va :, tarkibiy hisoblanadi. Ular tahlilchi(parser)ga yo'l qayerda tugab, so'rov satri qayerdan boshlanishini yoki bitta parametr qayerda to'xtab, keyingisi qayerdan boshlanishini aytadi. Agar haqiqiy ma'lumotingizda shu belgilardan biri bo'lsa, u kodlanishi kerak, aks holda tahlilchi uni tinish belgisi deb noto'g'ri tushunib qolishi mumkin. A&B/2024 kabi buyurtma havolasi so'rov satriga xom holda tushib qolsa, u ikkita parametr va yo'l segmenti sifatida noto'g'ri o'qilib qolar edi.

So'ngra xavfli va ASCII bo'lmagan belgilar bor: bo'sh joylar, qo'shtirnoqlar, burchakli qavslar, aksentli harflar, emoji, ASCII doirasidan tashqaridagi har qanday narsa. Ularning URL'da so'zma-so'z paydo bo'lishga hech qanday haqqi yo'q, chunki ular uzatish jarayonida buziladi yoki ularning aniqlangan ko'rinishi mavjud emas. Ularni kodlash natijani tasodifga qoldirish o'rniga havolalarni toza va oldindan aytib bo'ladigan holda saqlaydi.

U haqiqiy ishda qayerda paydo bo'ladi

So'rov satrlari klassik holdir. ?key=...ga qo'shadigan har bir qiymat kodlanishi kerak, shunda foydalanuvchi kiritgan ma'lumot tuzilmani buzolmaydi. Xuddi shu narsa application/x-www-form-urlencoded sifatida yuborilgan HTML forma topshirishlariga ham tegishli, bunda brauzer maydon qiymatlarini avtomatik kodlaydi (va tarixiy an'anaga ko'ra, bo'sh joylarni %20 emas, +ga aylantiradi). Siz buni lotin bo'lmagan sarlavhalarga ega sahifalarga ishora qiluvchi havolalar yaratayotganda, API so'rovlarini qo'lda tuzayotganda, yo'naltirish maqsadlarini parametr sifatida uzatayotganda va manzil satrida yaxshi ko'ringan so'rov serverga nega buzilib yetib borishini tuzatayotganda ham uchratasiz.

URL kodlashni ifodalovchi porlayotgan ko'k va tilla quvurdan xavfsiz oqayotgan ma'lumot oqimi
Kodlash ixtiyoriy matnning tarmoq orqali xavfsiz o'tishiga imkon beradi.

encodeURI va encodeURIComponent

JavaScript ikkita kodlovchini taqdim etadi, va noto'g'risini tanlash keng tarqalgan xatoliqdir. Farq qamrov haqida. encodeURIComponent bitta ma'lumot bo'lagi uchun, masalan bitta so'rov qiymati uchun mo'ljallangan. U deyarli hamma narsani, jumladan /, ?, :, @, &, =, + va # kabi zahiralangan belgilarni ham kodlaydi. Bu ma'lumot o'sha belgilarni oddiy matn sifatida o'z ichiga olishiga ruxsat berilganda aynan sizga kerak bo'ladi.

encodeURI esa ishlab turishini xohlagan butun manzil uchun mo'ljallangan. U tarkibiy belgilarga tegmaydi, shuning uchun URL'ni birlashtirib turadigan qiya chiziqlar, ikki nuqtalar va so'roq belgilari saqlanib qoladi. Siz to'liq URL'ga ega bo'lganingizda va faqat bo'sh joylar yoki ASCII bo'lmagan belgilarni tozalamoqchi bo'lganingizda undan foydalaning; kattaroq URL'ga qiymat kiritayotganingizda esa encodeURIComponentga murojaat qiling. Oddiy qoida: butun havolani encodeURI bilan kodlang, ichiga solayotgan qismlarni encodeURIComponent bilan kodlang.

Hammasi qurilmangizda qoladi

Ushbu vosita to'liq brauzeringizda ishlaydi. Siz joylashtirgan matn xuddi shu standart usullar bilan lokal ravishda kodlanadi yoki dekodlanadi va hech qachon serverga yubormaydi, bu esa tokenlar, imzolangan parametrlar yoki tarmoq orqali yubormasligingiz ma'qulroq bo'lgan boshqa har qanday narsa uchun xavfsiz qiladi. Boshqa matn o'zgartirishlar bilan ishlasangiz, Base64 konvertori uning yonida joylashgan, va kundalik yordamchi vositalar to'plamini dasturchi vositalarimiz orqali ko'rib chiqishingiz mumkin.

Tez-tez so'raladigan savollar

URL'da %20 nimani anglatadi?

Bu kodlangan bo'sh joy. Bo'sh joy belgisi URL'da so'zma-so'z ishlatilishiga ruxsat berilmaydi, shuning uchun u protsent belgisi va o'n oltilik 20 qiymati bilan almashtiriladi, bu esa bo'sh joyning bayt qiymatidir.

Nega ba'zida %20 o'rniga plyus belgisini ko'raman?

application/x-www-form-urlencoded turidagi HTML forma ma'lumotlari tarixiy an'anaga ko'ra bo'sh joylarni plyus belgisi bilan kodlaydi. Oddiy yo'l yoki so'rovda esa bo'sh joy %20 sifatida kodlanadi. Ikkalasi ham o'z kontekstida bo'sh joyga qaytarib dekodlanadi.

encodeURI o'rniga qachon encodeURIComponent ishlatishim kerak?

URL'ga kiritayotgan bitta qiymat, masalan so'rov parametri uchun encodeURIComponent'dan foydalaning, chunki u zahiralangan belgilarni ham kodlaydi. Uni birlashtirib turadigan qiya chiziqlar, ikki nuqtalar va so'roq belgilarini saqlab qolishni xohlaganingizda esa to'liq manzil uchun encodeURI'dan foydalaning.

URL kodlash ma'lumotimning mazmunini o'zgartiradimi?

Yo'q. Kodlash to'liq qaytariladi. Natijani dekodlash, ikkala tomonda ham bir xil belgilar to'plami ishlatilsa, aynan asl matnni bayt-bayt bilan qaytaradi.

Aksentli harflar yoki emoji kabi ASCII bo'lmagan belgilar qanday qayta ishlanadi?

Ular avval UTF-8 baytlariga aylantiriladi, so'ng har bir bayt o'zining protsent uchligiga aylanadi. Shuning uchun bitta aksentli harf yoki emoji kodlangan natijada bir nechta uchlikka kengayishi mumkin.

Ushbu vositadan foydalanganimda matnim serverga yuboriladimi?

Yo'q. Kodlash va dekodlash to'liq brauzeringizda amalga oshiriladi. Siz joylashtirgan hech narsa yuklanmaydi, shuning uchun uni maxfiy yoki nozik satrlar bilan ishlatish xavfsiz.