URL enkoder i dekoder

Acrafto Team Програмери
Ажурирано
Кодирај као

За једну вредност упита или део путање. Кодира све осим слова, цифара и - _ . ! ~ * ' ( ), исто као encodeURIComponent.

Резултат

Све ради у вашем прегледачу и ништа што налепите се не отпрема. То је важно, јер URL-ови често носе токене и ИД-ове сесија.

URL enkoder i dekoder online kodira i dekodira tekst dok kucate: alatka pretvara razmake, slova sa dijakriticima i simbole kao što su & ili ? u procentno kodirane nizove poput %20, a zatim ih vraća u čitljiv tekst. Druga kartica je URL parser. Ona razlaže bilo koju adresu na protokol, host, putanju i parametre upita koje možete menjati, isključivati ili čistiti od oznaka za praćenje, a pravilno kodiranu adresu upisuje nazad umesto vas. Sve se događa u vašem pregledaču.

Kako se kodira i dekodira URL

  1. Otkucajte ili nalepite tekst u polje na kartici Kodiraj / Dekodiraj. Rezultat se osvežava sa svakim pritiskom na taster.
  2. Izaberite Smer. Kodiraj čini tekst bezbednim za URL, a Dekodiraj vraća caf%C3%A9%20au%20lait u café au lait. Ako u prazno polje nalepite tekst sa nizovima kao što je %20, alatka sama prelazi na Dekodiraj (Kodiraj umesto toga vraća nazad). Običan tekst koji treba kodirati, nalepljen u režimu Dekodiraj, na isti način prebacuje na Kodiraj, uz dugme Dekodiraj umesto toga.
  3. Pri kodiranju pod Kodiraj kao izaberite šta tekst predstavlja (pogledajte sledeći odeljak). Podrazumevana Vrednost parametra odgovara jednoj vrednosti upita.
  4. Kopiraj stavlja rezultat u klipbord. Zameni premešta rezultat u ulaz i okreće smer. To je brza provera u krug: dekodiranjem upravo kodiranog teksta morate dobiti original.

Svaki znak koji je alatka promenila istaknut je u rezultatu. Zadržite pokazivač iznad njega da vidite znak, njegovu Unicode tačku i bajtove, na primer é U+00E9 %C3%A9. Ispod polja vidite broj Znakova, UTF-8 bajtova i Kodiranih znakova (ili Dekodiranih znakova). Isprobaj primer učitava rečenicu Цена: 50 % попуста, ћевапи & ражњићи? Да!, koja ima 41 znak, ali 67 UTF-8 bajtova, jer svako ćirilično slovo zauzima dva bajta.

Pri kodiranju Svaki red posebno kodira svaki red za sebe i čuva prelome redova, što odgovara spisku vrednosti ili linkova. Bez te opcije i prelom reda se kodira i postaje %0A. Kada je tekst URL sa parametrima, alatka nudi Razloži na delove, što otvara adresu na kartici parsera.

Kodiranje parametra, celog URL-a ili podataka obrasca

Ne mora svaki znak da se kodira svuda. Kosa crta razdvaja foldere u putanji, ali je običan podatak unutar vrednosti parametra, pa tačan rezultat zavisi od toga šta kodirate. Kodiraj kao nudi četiri režima:

  • Vrednost parametra radi kao JavaScript encodeURIComponent i odgovara jednoj vrednosti upita ili segmentu putanje. Kodira sve osim slova, cifara i - _ . ! ~ * ' ( ), pa &, =, / ili ? unutar vrednosti ne mogu pokvariti URL. Kodiranjem café & crème dobija se caf%C3%A9%20%26%20cr%C3%A8me, spremno za upis posle q=.
  • Ceo URL je za kompletnu adresu koju samo treba urediti. Kodira razmake, znakove izvan ASCII, kontrolne znakove, obrnuti apostrof i " < > \ ^ { | }, a zadržava sve što URL-u daje strukturu: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Zato https://example.com/search?q=café au lait&lang=fr postaje https://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Nizovi koji su već kodirani ostaju kakvi jesu, a usamljeni % postaje %25. Po tome se razlikuje od JavaScript funkcije encodeURI, koja postojeći %20 pretvara u %2520 i kodira zagrade IPv6 adrese kao što je http://[2001:db8::1]:8080/.
  • Podaci obrasca prati format application/x-www-form-urlencoded (na engleskom) koji proizvode HTML obrasci i URLSearchParams. Razmak postaje +, a nekodirani ostaju samo slova, cifre i * - . _, pa se i ! ' ( ) ~ kodiraju.
  • Strogi RFC 3986 ostavlja nekodirane samo nerezervisane znakove iz RFC 3986 (na engleskom): slova, cifre i - . _ ~. OAuth 1.0 (RFC 5849) i AWS Signature Version 4 zahtevaju upravo ovaj oblik, jer se potpis poklapa samo ako obe strane isto kodiraju ! ili *.

Isti znakovi u svakom režimu:

ZnakVrednost parametraCeo URLPodaci obrascaStrogi RFC 3986
razmak%20%20+%20
&%26&%26%26
/%2F/%2F%2F
+%2B+%2B%2B
~~~%7E~
!!!%21%21
****%2A
é%C3%A9%C3%A9%C3%A9%C3%A9

Tekst se uvek kodira kao UTF-8, a heksadecimalne cifre su uvek velika slova. Ako ulaz već sadrži nizove kao što je %20, napomena to kaže i nudi Dekodiraj umesto toga, da tekst ne biste greškom kodirali dvaput.

Da biste JSON preneli u parametru upita, smanjite ga u JSON formateru i kodirajte kao Vrednost parametra: {"id":7,"tags":["a","b"]} postaje %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Radi i obrnuto: parametar dekodirajte ovde, a zatim ga formatirajte tamo.

Problemi pri dekodiranju URL-a: plus, %2520 i pokvareni nizovi

Dekodiranje obično jednostavno radi, ali četiri situacije zbunjuju ljude. Alatka rešava svaku od njih umesto da stane sa greškom:

  • Znak plus označava razmak u podacima obrasca i u većini nizova upita. Dekodiraj + kao razmak je podrazumevano uključeno, pa se caf%C3%A9+au+lait dekodira u café au lait. U celom URL-u samo plusevi posle znaka ? važe kao razmaci, jer je u putanji plus običan znak. Isključite opciju kada je plus mišljen doslovno. Plus koji je kodiran kao %2B uvek ostaje plus.
  • Dvostruko kodiranje nastaje kada dva sloja koda kodiraju istu vrednost, na šta RFC 3986 izričito upozorava. Svaki % postaje %25, pa se razmak iz %20 pretvara u %2520. Ako dekodirani rezultat i dalje sadrži nizove kao što je %20, alatka kaže da je tekst verovatno kodiran dvaput i nudi Dekodiraj ponovo.
  • Neispravan niz, to jest % iza koga ne slede dve heksadecimalne cifre kao u 100% ili %G1, izaziva grešku URIError u JavaScript funkciji decodeURIComponent. Ovde se takvi nizovi ostavljaju kakvi jesu, označavaju crvenom bojom i broje, a ostatak teksta se dekodira.
  • Stari Latin-1 linkovi potiču iz vremena pre UTF-8, kada su neki sajtovi kodirali é kao jedan bajt %E9. caf%E9 nije ispravan UTF-8, pa decodeURIComponent ne uspeva, a Pythonov unquote vraća caf iza koga sledi zamenski znak U+FFFD. Alatka takve bajtove čita kao Windows-1252, dekodira caf%E9 u café i dodaje napomenu o tome.

Kontrolni znakovi u dekodiranom tekstu, kao što su tabulator ili nulti bajt, prikazuju se vidljivim simbolima poput ␉ i ␀, ali Kopiraj kopira stvarni tekst.

URL parser: razlaganje URL-a i uređivanje parametara upita

Nalepite adresu u polje URL na kartici Razloži i uredi URL i ona se razlaže na Protokol, Host, Port, Putanja i Fragment, uz Korisničko ime i Lozinka kada ih URL sadrži. Vrednosti se prikazuju dekodirane, pa je ova kartica i najbrži način da dekodirate parametre URL-a: čitate кожне ципеле umesto %D0%BA%D0%BE%D0%B6%D0%BD%D0%B5+%D1%86%D0%B8%D0%BF%D0%B5%D0%BB%D0%B5. Uređivanje radi u oba smera, kao adresna traka i tabela parametara u Postmanu. Promenite polje i URL se odmah ponovo piše, pravilno kodiran; promenite URL i svi delovi se ponovo čitaju. Delovi koje ne dirate ostaju tačno onakvi kakvi su bili, znak po znak.

Tabela Parametri upita navodi svaki parametar sa njegovim Naziv i Vrednost. Isključite Uključi u URL da parametar izostavite bez brisanja, što pomaže kada tražite onaj koji kvari zahtev. Dodaj parametar, Ukloni parametar i Sortiraj A do Š rade ono što pišu. Ponovljeni nazivi poput tag=a&tag=b i nazivi bez vrednosti poput ?debug se čuvaju. Razmaci u parametrima određuje da li se razmaci pišu kao %20 ili +; podrazumevano prati URL koji ste nalepili.

Linkovi za prijavu i plaćanje često u parametru nose drugi URL, kodiran tako da se njegovi ? i & ne mešaju sa spoljnim:

https://auth.example.com/authorize?client_id=abc&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Ftab%3D2

Vrednost koja je i sama URL, obično u redirect_uri, return, url ili next, dobija dugme Uredi URL unutra. Unutrašnja adresa https://app.example.com/callback?tab=2 otvara se kao poseban nivo sa sopstvenim delovima i parametrima, putanja za povratak (Glavni URL › redirect_uri) vodi nazad, a svaka promena se kodirana upisuje u spoljni URL. Kopiraj glavni URL kopira rezultat. Ovo radi i na više nivoa dubine.

Kada deo posle # liči na parametre, kao #access_token=...&state=... u OAuth implicitnom toku ili #/search?q=shoes u rutama jednostranih aplikacija, druga tabela, Parametri fragmenta, i njih navodi.

Parser ukazuje i na probleme: URL bez protokola, koji pregledači tretiraju kao relativan link; port izvan opsega od 0 do 65535; i znakove koji moraju biti kodirani, kao što su razmaci, slova sa dijakriticima, " ili <, što Kodiraj ih ispravlja jednim korakom. Tekst bez adrese, poput a=1&b=2, čita se kao niz upita. Za internacionalizovani domen (na engleskom) alatka prikazuje Punycode oblik koji koriste DNS i pregledači, pa münchen.de postaje xn--mnchen-3ya.de, a domen koji počinje sa xn-- dobija čitljiv oblik.

Kopiraj URL kopira gotovu adresu, Otvori je otvara u novoj kartici (samo http i https linkovi), a Kopiraj kao JSON daje parametre kao JSON objekat, sa ponovljenim nazivima sakupljenim u niz.

Uklanjanje UTM i drugih parametara za praćenje iz URL-a

Linkovi iz biltena, reklama i društvenih mreža nose parametre koji sajtu samo kažu odakle je posetilac došao. UTM parametri (na engleskom) utm_source, utm_medium, utm_campaign, utm_term i utm_content potiču od Urchina, prethodnika Google Analyticsa. ID-ove klikova kao što su fbclid (Facebook), gclid (Google Ads) i msclkid (Microsoft Advertising) dodaju same platforme.

Parser ih obeležava oznakom praćenje, a Ukloni praćenje (n) briše sve odjednom. Pored svakog utm_* parametra prepoznaje još više od 20 drugih, kao što su ttclid (TikTok), mc_cid (Mailchimp) i _hsenc (HubSpot). Parametri koji su stranici potrebni ostaju na mestu: u linku prodavnice iz Isprobaj primer, Ukloni praćenje (4) uklanja utm_source, utm_medium, utm_campaign i fbclid, a zadržava q, size, return i fragment #reviews.

Link koji ide u QR kod vredi prvo očistiti ovde. Bez parametara za praćenje kraći je, a kraći link daje ređi kod koji se lakše skenira.

Šta je procentno kodiranje i kako znakovi postaju %XX

Procentno kodiranje (na engleskom), poznato i kao URL kodiranje, piše znak kao % iza koga slede dve heksadecimalne cifre. URL sme da sadrži samo ograničen skup ASCII znakova, a neki od njih imaju zadatak: ? počinje upit, & razdvaja parametre, # počinje fragment. RFC 3986 ih naziva rezervisanim znakovima (: / ? # [ ] @ i ! $ & ' ( ) * + , ; =). Slova, cifre i - . _ ~ su nerezervisani znakovi i nikad ih nije potrebno kodirati. Sve ostalo, kao i svaki rezervisani znak koji se koristi kao običan podatak, kodira se.

Znakovi izvan ASCII prvo se pretvaraju u UTF-8 bajtove, a svaki bajt dobija sopstveni %XX:

  • é je U+00E9, što UTF-8 čuva kao dva bajta C3 A9, pa postaje %C3%A9.
  • € je U+20AC, tri bajta: %E2%82%AC.
  • Emodži kao što je U+1F600 (nasmejano lice) zauzima četiri bajta: %F0%9F%98%80.

%c3%a9 i %C3%A9 znače isto, ali RFC 3986 preporučuje velika slova, što alatka i piše. Tabela procentnog kodiranja znakova koje najčešće srećete:

ZnakKodiranoZnakKodirano
razmak%20+%2B
!%21,%2C
"%22/%2F
#%23:%3A
$%24;%3B
%%25=%3D
&%26?%3F
'%27@%40
(%28[%5B
)%29]%5D
*%2Aprelom reda%0A

URL kodiranje u JavaScriptu, Pythonu i PHP-u

Svaki jezik ima funkcije za ovo, a razlikuju se uglavnom po tome kako tretiraju razmake, kose crte i ! ' ( ) * ~.

JavaScript ima encodeURIComponent (na engleskom) za vrednost, encodeURI za celu adresu i URLSearchParams za kodiranje obrazaca:

encodeURIComponent("café & crème")                     // "caf%C3%A9%20%26%20cr%C3%A8me"
encodeURI("https://example.com/a b?q=café")            // "https://example.com/a%20b?q=caf%C3%A9"
new URLSearchParams({ q: "café & crème" }).toString()  // "q=caf%C3%A9+%26+cr%C3%A8me"
decodeURIComponent("caf%C3%A9")                        // "café"

decodeURIComponent ne pretvara + u razmak i izaziva URIError na neispravnom nizu kao što je 100%.

U Pythonu se funkcije nalaze u urllib.parse. quote podrazumevano zadržava / (safe='/'), a inače kodira sve osim nerezervisanih znakova iz RFC 3986. quote_plus piše razmake kao + i kodira i /:

from urllib.parse import quote, quote_plus, urlencode, unquote_plus

quote("café & crème/brûlée")       # 'caf%C3%A9%20%26%20cr%C3%A8me/br%C3%BBl%C3%A9e'
quote("a b/c", safe="")            # 'a%20b%2Fc'
quote_plus("café & crème/brûlée")  # 'caf%C3%A9+%26+cr%C3%A8me%2Fbr%C3%BBl%C3%A9e'
urlencode({"q": "café & crème", "page": 2})  # 'q=caf%C3%A9+%26+cr%C3%A8me&page=2'
unquote_plus("caf%C3%A9+au+lait")  # 'café au lait'

U PHP-u urlencode kodira kao HTML obrazac i piše razmak kao +, dok rawurlencode prati RFC 3986 i piše %20:

urlencode("café & crème");     // "caf%C3%A9+%26+cr%C3%A8me"
rawurlencode("café & crème");  // "caf%C3%A9%20%26%20cr%C3%A8me"

rawurlencode daje isti rezultat kao Strogi RFC 3986. urlencode odgovara režimu Podaci obrasca, osim za *, koji kodira kao %2A.

Često postavljana pitanja

Da li razmak treba kodirati kao %20 ili +?

%20 radi svuda u URL-u. + znači razmak samo u nizu upita i u podacima obrasca, formatu koji šalju HTML obrasci. U putanji je + običan znak plus, pa /a+b ostaje /a+b. Kada vrednost upita treba da sadrži pravi plus, napišite ga kao %2B. Režim Podaci obrasca piše razmake kao +, a ostala tri režima kao %20.

Šta znače %20, %2F i %3D u URL-u?

To su kodirani znakovi: %20 je razmak, %2F kosa crta, a %3D znak jednakosti. Druge koje često viđate su %26 (&), %3F (?), %3A (:), %2C (zarez) i %27 (apostrof). Dve cifre su kôd znaka u heksadecimalnom zapisu. Slova sa dijakriticima i ostali znakovi izvan ASCII zauzimaju dva do četiri takva para, kao %C3%A9 za é. Nalepite ceo niz u dekoder da ga pročitate.

Koja je razlika između encodeURI i encodeURIComponent?

encodeURI je namenjen celoj adresi i ostavlja znakove koji joj daju strukturu, kao što su : / ? # & =. encodeURIComponent je namenjen jednom delu, vrednosti parametra ili segmentu putanje, i kodira i te znakove, pa https://example.com/?a=1&b=2 postaje https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. U ovoj alatki Vrednost parametra odgovara funkciji encodeURIComponent, a Ceo URL je kao encodeURI, ali zadržava postojeće nizove kao što je %20 umesto da ih pretvara u %2520.

Kako ukloniti UTM parametre iz URL-a?

Nalepite link na karticu Razloži i uredi URL i pritisnite Ukloni praćenje (n). To briše svaku oznaku utm_* i ID-ove klikova kao što su fbclid i gclid odjednom. Zatim pritisnite Kopiraj URL. Ako želite da izbacite samo neke, koristite Ukloni parametar na redovima koje ne želite.

Da li je URL kodiranje isto što i šifrovanje ili Base64?

Ne. URL kodiranje ništa ne skriva: svako može da dekodira caf%C3%A9 nazad u café, pa nikad ne štiti lozinku ni token. Ono samo čini znakove bezbednim za upotrebu u adresi. Base64 je drugo kodiranje koje bilo koje podatke, uključujući binarne datoteke, pretvara u niz od 64 znaka. Base64 niz u URL-u i dalje zahteva kodiranje znakova +, / i =, osim ako ne koristite URL-safe varijantu, koju može da napravi Base64 enkoder i dekoder.

Da li se URL-ovi koje nalepim otpremaju ili čuvaju?

Ne. Kodiranje, dekodiranje i razlaganje rade u vašem pregledaču i ništa što nalepite ne šalje se na server. To je važno, jer URL-ovi često nose pristupne tokene, ID-ove sesija ili kodove za resetovanje lozinke. Pregledač pamti samo izabranu karticu i opcije, nikad tekstove. Jedino što učitava adresu je Otvori, koje je otvara u novoj kartici baš kao klik na link.

Još alata za programere nalazi se u kategoriji Programeri, a alati koji jedan format pretvaraju u drugi sakupljeni su u kategoriji Konverteri. Da biste videli šta se razlikuje između dva duga URL-a, na primer ispravnog i neispravnog poziva API-ja, nalepite ih u alat za poređenje teksta i poredite po znakovima.

Ценио бих ако бисте поделили ове странице са пријатељима, сачували их у обележиваче или линковали на њих. Хвала! 🙏