Kas yra šis įrankis?
URL kodavimas (procentinis kodavimas) pakeičia simbolius, kurie neleidžiami URL adresuose, ženklu % ir jų baito reikšme šešioliktainiu formatu — tarpas tampa %20, o 你 tampa %E4%BD%A0. Be to, tokie simboliai kaip tarpai, &, ? ir ne ASCII tekstas sugadintų URL struktūrą arba būtų neteisingai interpretuoti serverių.
Yra du dažni poreikiai, ir šis įrankis palaiko abu: reikšmės, kuri patenka į užklausos parametrą, kodavimas (komponento režimas — koduoja ir / ? & =), bei viso URL kodavimas, išlaikant jo struktūrą (viso URL režimas — palieka :// ? & nepakeistus).
Verta žinoti vieną istorinį keistumą: pagal URL standartą tarpas teisingai koduojamas kaip %20 (RFC 3986), tačiau HTML formų pateikimai tradiciškai vietoj to koduoja jį pliuso ženklu — todėl praktikoje matote ir q=hello%20world, ir q=hello+world, ir kodėl dekoduojant formos duomenis kartais reikia + apdoroti atskirai.
Kodėl jį naudoti?
- Saugiai kurkite užklausos eilutes — vartotojo įvestis su &, = ar tarpais nesugadins jūsų URL.
- Dekoduokite ilgus užkoduotus URL iš žurnalų, analitikos ar peradresavimo grandinių, kad pamatytumėte, ką jie iš tikrųjų reiškia.
- Teisingas UTF-8 apdorojimas kinų kalbos, jaustukų ir kito ne ASCII teksto atveju.
- Du režimai, kad netyčia neužkoduotumėte viso URL : ir / simbolių.
- Nemokama, akimirksniu, be įkėlimo.
Kaip naudoti
- Įklijuokite savo tekstą ar URL į įvesties langelį.
- Pasirinkite režimą: „Komponentas“ reikšmėms, patenkančioms į užklausos parametrus, „Visas URL“ visiems URL adresams.
- Spustelėkite „Koduoti“ arba „Dekoduoti“.
- Nukopijuokite rezultatą.
Pavyzdys
Įvestis
https://example.com/search?q=hello world & 你好Išvestis
Komponento režimas: https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%20%26%20%E4%BD%A0%E5%A5%BD
Viso URL režimas: https://example.com/search?q=hello%20world%20&%20%E4%BD%A0%E5%A5%BDKomponento režimas koduoja ir struktūrinius simbolius; viso URL režimas juos išlaiko.
Dažniausi naudojimo atvejai
- Dalinamo URL kūrimas, kai paieškos terminas ar filtro reikšmė gaunama iš vartotojo įvesties ir gali turėti tarpų, & ar kitų specialiųjų simbolių.
- Ilgo sekimo ar peradresavimo URL iš el. laiško ar reklamos kampanijos dekodavimas, kad pamatytumėte tikrą tikslą ir parametrus prieš spustelėdami.
- Klaidos derinimas, kodėl serveris neteisingai skaito užklausos parametrą — dažniausiai kaltas rezervuotas simbolis, kuris turėjo būti užkoduotas, bet nebuvo.
- Ne angliškos (kinų, japonų, arabų ir kt.) reikšmės paruošimas naudojimui URL užklausos eilutėje.
encodeURIComponent ir encodeURI praktikoje
Šie du atitinka tiesiogiai šio įrankio du režimus ir atitinka realias JavaScript funkcijas, kurias kūrėjai jau žino: encodeURIComponent (komponento režimas) koduoja viską, išskyrus nedidelį nerezervuotų simbolių rinkinį, todėl saugu bet kokiai atskirai reikšmei, įterpiamai į URL — tai naudojate užklausos parametrui, kelio segmentui ar žymos fragmento reikšmei. encodeURI (viso URL režimas) palieka nepakeistus URL struktūrinius simbolius (:, /, ?, #, &, =), nes daroma prielaida, kad koduojate visą, jau struktūruotą URL, o ne neapdorotą reikšmę — jį naudojant vienai parametro reikšmei, nepavyktų užkoduoti & ar = simbolių, kurie gali būti toje reikšmėje, o tai yra dažniausia klaida, renkantis netinkamą režimą.
Rezervuoti ir nerezervuoti simboliai
URL specifikacija (RFC 3986) skirsto simbolius į dvi grupes: nerezervuoti simboliai (raidės, skaitmenys, - _ . ~) visada saugūs ir niekada nekoduojami, o rezervuoti simboliai (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) turi ypatingą reikšmę URL struktūroje ir juos reikia koduoti tik tada, kai jie pasirodo kaip tikri duomenys, o ne struktūrinė skyryba. Būtent dėl to egzistuoja du režimai — komponento režimas rezervuotus simbolius laiko duomenimis, kuriuos reikia apsaugoti, viso URL režimas juos laiko struktūra, kurią reikia išsaugoti. Šio skirtumo supratimas naudingesnis nei įsiminti, kada kurį režimą naudoti, nes jis paaiškina, kodėl tas pats simbolis (pvz., &) kartais koduojamas, o kartais paliekamas nepakeistas, priklausomai nuo jo vaidmens konkrečiame URL.
Dažniausiai užduodami klausimai
Kada naudoti komponento režimą, o kada viso URL režimą?
Komponento režimą (encodeURIComponent) naudokite koduodami vieną reikšmę, kuri patenka į užklausos parametrą — jis koduoja /, ?, & ir =, kad jie negalėtų sugadinti URL. Viso URL režimą (encodeURI) naudokite koduodami visą URL — jis išlaiko struktūrinius simbolius, kad URL vis tiek veiktų.
Kodėl vietoj tarpo atsirado %20, o ne +?
Abu galioja skirtinguose kontekstuose. %20 yra universalus procentinis tarpo kodavimas; + reiškia tarpą tik užklausos eilutėse, naudojant senesnį application/x-www-form-urlencoded formatą. Šis įrankis naudoja %20, kuris veikia visur.
Kodėl dekodavimas baigiasi klaida?
Įvestyje yra netinkamos formos procentinė seka, pvz., % po kurio neina du šešioliktainiai skaitmenys. Tai dažnai nutinka, kai URL buvo nukirstas arba dekoduotas du kartus. Ištaisykite ar pašalinkite sugadintą % seką.
Kas yra dvigubas kodavimas?
Jau užkoduoto teksto kodavimas: %20 tampa %2520, nes pats % ženklas užkoduojamas kaip %25. Tai dažna klaida — jei dekoduotas rezultatas vis dar turi % kodus, dekoduokite dar kartą.
Ar tai apdoroja kinų kalbos simbolius ir jaustukus?
Taip. Tekstas koduojamas kaip UTF-8 baitai, tad 你好 tampa %E4%BD%A0%E5%A5%BD ir dekoduojasi atgal be klaidų — taip pat, kaip veikia naršyklės.