URL koder i dekoder

Acrafto Team Programeri
Ažurirano
Kodiraj kao

Za jednu vrijednost upita ili dio putanje. Kodira sve osim slova, znamenki i - _ . ! ~ * ' ( ), jednako kao encodeURIComponent.

Rezultat

Sve radi u vašem pregledniku i ništa što zalijepite ne šalje se na poslužitelj. To je važno jer URL-ovi često sadrže tokene i ID-ove sesija.

URL encode i decode teksta online dok tipkate: alat razmake, slova s kvačicama i simbole poput & ili ? pretvara u postotno kodirane nizove, na primjer %20, i vraća ih u čitljiv tekst. Druga kartica je URL parser. Rastavlja bilo koju adresu na protokol, host, putanju i parametre upita koje možete uređivati, isključiti ili očistiti od oznaka za praćenje, a ispravno kodirani URL upisuje natrag umjesto vas. Sve se događa u vašem pregledniku.

Kako napraviti URL encode i decode teksta

  1. Upišite ili zalijepite tekst u polje na kartici Kodiranje / dekodiranje. Rezultat se ažurira sa svakim pritiskom na tipku.
  2. Odaberite Smjer. Kodiraj čini tekst sigurnim za URL, Dekodiraj vraća caf%C3%A9%20au%20lait u café au lait. Zalijepite li tekst s nizovima poput %20 u prazno polje, alat sam prelazi na Dekodiraj (Kodiraj umjesto toga vraća natrag). Obični tekst koji treba kodirati, zalijepljen u načinu Dekodiraj, na isti način prebacuje na Kodiraj, uz gumb Dekodiraj umjesto toga.
  3. Pri kodiranju pod Kodiraj kao odaberite što taj tekst jest (vidi sljedeći odjeljak). Zadana opcija, Vrijednost parametra, ispravna je za jednu vrijednost upita.
  4. Kopiraj stavlja rezultat u međuspremnik. Zamijeni prebacuje rezultat u ulaz i obrće smjer. To je brza provjera u oba smjera: dekodiranje upravo kodiranog teksta mora vratiti vaš izvorni tekst.

Svaki znak koji je alat promijenio istaknut je u rezultatu. Zadržite pokazivač iznad njega i vidjet ćete znak, njegovu Unicode kodnu točku i bajtove, na primjer é U+00E9 %C3%A9. Ispod polja vidite broj Znakova, UTF-8 bajtova i Kodiranih znakova (odnosno Dekodiranih znakova). Isprobaj primjer učitava rečenicu Cijena: 50 % popusta, čaj & šljivovica? Da!, koja ima 43 znaka, ali 45 UTF-8 bajtova, jer svako slovo s kvačicom zauzima dva bajta.

Pri kodiranju Svaki redak zasebno kodira svaki redak za sebe i zadržava prijelome redaka, što odgovara popisu vrijednosti ili poveznica. Bez te opcije i prijelom retka se kodira i postaje %0A. Kada je tekst URL s parametrima, alat nudi Rastavi na dijelove, što adresu otvara na kartici parsera.

Kodiranje parametra URL-a, cijelog URL-a ili podataka obrasca

Ne mora se svaki znak posvuda kodirati. Kosa crta odvaja mape u putanji, ali je unutar vrijednosti parametra obični podatak, pa ispravan rezultat ovisi o tome što kodirate. Kodiraj kao nudi četiri načina:

  • Vrijednost parametra radi kao JavaScriptov encodeURIComponent i odgovara jednoj vrijednosti upita ili dijelu putanje. Kodira sve osim slova, znamenki i - _ . ! ~ * ' ( ), pa &, =, / ili ? unutar vrijednosti ne mogu pokvariti URL. Kodiranjem teksta café & crème dobivate caf%C3%A9%20%26%20cr%C3%A8me, spremno za unos iza q=.
  • Cijeli URL služi za potpunu adresu koju treba samo urediti. Kodira razmake, znakove izvan ASCII-ja, kontrolne znakove, obrnuti apostrof i " < > \ ^ { | }, a zadržava sve što URL-u daje strukturu: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Tako https://example.com/search?q=café au lait&lang=fr postaje https://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Već kodirani nizovi ostaju kakvi jesu, a usamljeni % postaje %25. Tu se razlikuje od JavaScriptova encodeURI, koji postojeći %20 pretvara u %2520 i kodira uglate zagrade IPv6 adrese poput http://[2001:db8::1]:8080/.
  • Podaci obrasca slijedi format application/x-www-form-urlencoded (na engleskom) koji stvaraju HTML obrasci i URLSearchParams. Razmak postaje +, a nekodirani ostaju samo slova, znamenke i * - . _, pa se kodiraju i ! ' ( ) ~.
  • Strogi RFC 3986 ostavlja nekodirane samo nerezervirane znakove iz RFC-a 3986 (na engleskom): slova, znamenke i - . _ ~. OAuth 1.0 (RFC 5849) i AWS Signature Version 4 traže upravo taj oblik, jer se potpis podudara samo ako obje strane ! ili * kodiraju jednako.

Isti znakovi u svakom načinu:

ZnakVrijednost parametraCijeli 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 uvijek kodira kao UTF-8, a heksadecimalne znamenke uvijek su velika slova. Ako ulaz već sadrži nizove poput %20, napomena to javlja i nudi Dekodiraj umjesto toga, kako tekst slučajno ne biste kodirali dvaput.

Za prosljeđivanje JSON-a u parametru upita smanjite ga u JSON formatteru i kodirajte kao Vrijednost 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 ovdje, a zatim ga formatirajte tamo.

Problemi pri URL decodeu: plusevi, %2520 i neispravni nizovi

Dekodiranje obično jednostavno radi, ali četiri situacije zbunjuju ljude. Alat ih sve rješava umjesto da se zaustave s greškom:

  • Znak plus u podacima obrasca i većini nizova upita znači razmak. Dekodiraj + kao razmak zadano je uključeno, pa se caf%C3%A9+au+lait dekodira u café au lait. U cijelom URL-u kao razmaci se računaju samo plusevi iza ?, jer je u putanji plus običan znak. Isključite opciju kada je plus mišljen doslovno. Plus koji je kodiran kao %2B uvijek ostaje plus.
  • Dvostruko kodiranje nastaje kada dva sloja koda kodiraju istu vrijednost, na što RFC 3986 izričito upozorava. Svaki % postaje %25, pa se razmak iz %20 pretvara u %2520. Ako dekodirani rezultat i dalje sadrži nizove poput %20, alat javlja da je tekst vjerojatno kodiran dvaput i nudi Dekodiraj ponovno.
  • Neispravan niz, odnosno % iza kojeg ne slijede dvije heksadecimalne znamenke, kao u 100% ili %G1, uzrokuje da JavaScriptov decodeURIComponent baci URIError. Ovdje se takvi nizovi ostavljaju kakvi jesu, označavaju crveno i broje, a ostatak teksta se dekodira.
  • Stare Latin-1 poveznice potječu iz vremena prije UTF-8, kada su neke stranice é kodirale kao jedan bajt %E9. caf%E9 nije ispravan UTF-8, pa decodeURIComponent ne uspijeva, a Pythonov unquote vraća caf iza kojeg slijedi zamjenski znak U+FFFD. Alat te bajtove čita kao Windows-1252, dekodira caf%E9 u café i dodaje napomenu o tome.

Kontrolni znakovi u dekodiranom tekstu, poput tabulatora ili nul-bajta, prikazuju se kao vidljivi simboli poput ␉ i ␀, ali Kopiraj kopira stvarni tekst.

URL parser: rastavite adresu i uredite parametre upita

Zalijepite adresu u polje URL na kartici Rastavi i uredi URL i ona se rastavlja na dijelove Protokol, Host, Port, Putanja i Fragment, a uz njih i Korisničko ime te Lozinka ako ih URL sadrži. Vrijednosti su prikazane dekodirane, pa je ta kartica i najbrži način da dekodirate parametre URL-a: čitate ženske tenisice umjesto %C5%BEenske+tenisice. Uređivanje radi u oba smjera, kao adresna traka i tablica parametara u Postmanu. Promijenite polje i URL se odmah prepisuje, ispravno kodiran; promijenite URL i svi se dijelovi ponovno čitaju. Dijelovi koje ne dirate ostaju točno onakvi kakvi su bili, znak po znak.

Tablica Parametri upita navodi svaki parametar sa stupcima Naziv i Vrijednost. Poništite oznaku Uključi u URL da parametar izostavite bez brisanja, što pomaže kada tražite onaj parametar koji kvari zahtjev. Dodaj parametar, Ukloni parametar i Poredaj A do Ž rade ono što piše. Ponovljeni nazivi poput tag=a&tag=b i nazivi bez vrijednosti poput ?debug se zadržavaju. Razmaci u parametrima određuje pišu li se razmaci kao %20 ili +; zadano slijedi URL koji ste zalijepili.

Poveznice za prijavu i plaćanje često nose drugi URL unutar parametra, kodiran tako da se njegovi ? i & ne miješaju s vanjskima:

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

Vrijednost koja je i sama URL, obično u redirect_uri, return, url ili next, dobiva gumb Uredi unutarnji URL. Unutarnja adresa https://app.example.com/callback?tab=2 otvara se kao zasebna razina sa svojim dijelovima i parametrima, navigacijska staza (Glavni URL › redirect_uri) vodi natrag, a svaka se promjena kodirana upisuje u vanjski URL. Kopiraj glavni URL kopira rezultat. To radi i kroz više razina.

Kada dio iza # izgleda kao parametri, kao #access_token=...&state=... u OAuth implicit toku ili #/search?q=shoes u rutama jednostraničnih aplikacija, i njih navodi druga tablica, Parametri fragmenta.

Parser upozorava i na probleme: URL bez protokola, koji preglednici tretiraju kao relativnu poveznicu; port izvan raspona od 0 do 65535; i znakove koje treba kodirati, poput razmaka, slova s kvačicama, " ili <, što Kodiraj ih ispravlja jednim korakom. Tekst bez adrese, poput a=1&b=2, čita se kao niz upita. Za internacionaliziranu domenu (na engleskom) alat prikazuje Punycode oblik koji koriste DNS i preglednici, pa münchen.de postaje xn--mnchen-3ya.de, a domena koja počinje s xn-- dobiva čitljiv oblik.

Kopiraj URL kopira gotovu adresu, Otvori je otvara u novoj kartici (samo http i https poveznice), a Kopiraj kao JSON daje parametre kao JSON objekt, pri čemu se ponovljeni nazivi skupljaju u polje.

Kako ukloniti UTM i druge parametre praćenja iz URL-a

Poveznice iz newslettera, oglasa i društvenih mreža nose parametre koji stranici samo govore odakle je posjetitelj došao. UTM parametri (na engleskom) utm_source, utm_medium, utm_campaign, utm_term i utm_content potječu od Urchina, preteče Google Analyticsa. ID-ove klikova poput fbclid (Facebook), gclid (Google Ads) i msclkid (Microsoft Advertising) dodaju same platforme.

Parser ih označava oznakom praćenje, a Ukloni praćenje (n) briše ih sve odjednom. Osim svakog parametra utm_* prepoznaje još više od 20 drugih, kao što su ttclid (TikTok), mc_cid (Mailchimp) i _hsenc (HubSpot). Parametri koje stranica treba ostaju na mjestu: u poveznici trgovine iz Isprobaj primjer, Ukloni praćenje (4) uklanja utm_source, utm_medium, utm_campaign i fbclid, a zadržava q, size, return i fragment #reviews.

Poveznicu koja ide u QR kod isplati se prvo očistiti ovdje. Bez parametara praćenja kraća je, a kraća poveznica daje manje gust kod koji se lakše skenira.

Što je postotno kodiranje i kako znakovi postaju %XX

Percent-encoding (na engleskom), poznato i kao URL encoding, zapisuje znak kao % iza kojeg slijede dvije heksadecimalne znamenke. URL smije sadržavati samo ograničen skup ASCII znakova, a neki od njih imaju zadaću: ? počinje upit, & odvaja parametre, # počinje fragment. RFC 3986 te znakove naziva rezerviranima (: / ? # [ ] @ i ! $ & ' ( ) * + , ; =). Slova, znamenke i - . _ ~ nisu rezervirani i nikad ih ne treba kodirati. Sve ostalo, kao i svaki rezervirani znak upotrijebljen kao obični podatak, kodira se.

Znakovi izvan ASCII-ja najprije se pretvaraju u UTF-8 bajtove, a svaki bajt dobiva vlastiti %XX:

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

%c3%a9 i %C3%A9 znače isto, ali RFC 3986 preporučuje velika slova, što alat i piše. Tablica postotnog 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
*%2Aprijelom retka%0A

URL encoding u JavaScriptu, Pythonu i PHP-u

Svaki jezik ima funkcije za to, a razlikuju se uglavnom po tome kako postupaju s razmacima, kosim crtama i znakovima ! ' ( ) * ~.

JavaScript ima encodeURIComponent (na engleskom) za vrijednost, encodeURI za cijelu 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, a na neispravnom nizu poput 100% baca URIError.

U Pythonu funkcije se nalaze u urllib.parse. quote zadano zadržava / (safe='/'), a inače kodira sve osim nerezerviranih 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 razmak piše kao +, dok rawurlencode slijedi 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 načinu Podaci obrasca, osim za *, koji kodira kao %2A.

Česta pitanja

Treba li razmak kodirati kao %20 ili +?

%20 radi posvuda 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 vrijednost upita treba pravi znak plus, napišite ga kao %2B. U alatu Podaci obrasca piše razmake kao +, a ostala tri načina kao %20.

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

To su kodirani znakovi: %20 je razmak, %2F kosa crta, a %3D znak jednakosti. Drugi koje često vidite su %26 (&), %3F (?), %3A (:), %2C (zarez) i %27 (apostrof). Dvije znamenke su kôd znaka u heksadecimalnom zapisu. Slova s kvačicama i drugi znakovi izvan ASCII-ja zauzimaju dva do četiri takva para, poput %C3%A9 za é. Zalijepite cijeli niz u dekoder da ga pročitate.

Koja je razlika između encodeURI i encodeURIComponent?

encodeURI je namijenjen cijeloj adresi i ne dira znakove koji joj daju strukturu, poput : / ? # & =. encodeURIComponent je namijenjen jednom dijelu, vrijednosti parametra ili dijelu 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 ovom alatu Vrijednost parametra odgovara funkciji encodeURIComponent, a Cijeli URL je poput encodeURI, ali zadržava postojeće nizove poput %20 umjesto da ih pretvara u %2520.

Kako ukloniti UTM parametre iz URL-a?

Zalijepite poveznicu na karticu Rastavi i uredi URL i pritisnite Ukloni praćenje (n). Odjednom briše svaku oznaku utm_* i ID-ove klikova poput fbclid i gclid. Zatim pritisnite Kopiraj URL. Ako želite izbaciti samo neke od njih, upotrijebite Ukloni parametar na recima koje ne želite.

Je li URL encoding isto što i šifriranje ili Base64?

Ne. URL encoding ništa ne skriva: svatko može caf%C3%A9 dekodirati natrag u café, pa nikad ne štiti lozinku ni token. Samo čini znakove sigurnima 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 treba kodirati +, / i =, osim ako upotrijebite inačicu sigurnu za URL, koju može stvoriti Base64 koder i dekoder.

Prenose li se ili pohranjuju URL-ovi koje zalijepim?

Ne. Kodiranje, dekodiranje i rastavljanje rade u vašem pregledniku i ništa što zalijepite ne šalje se na poslužitelj. To je važno jer URL-ovi često nose pristupne tokene, ID-ove sesija ili kodove za ponovno postavljanje lozinke. Preglednik pamti samo odabranu karticu i opcije, nikad tekstove. Jedino što učitava adresu je Otvori, koji je otvara u novoj kartici baš kao klik na poveznicu.

Više alata za programere nalazi se u kategoriji Programeri, a alati koji jedan format pretvaraju u drugi okupljeni su u kategoriji Pretvarači. Da biste pronašli što se razlikuje između dva duga URL-a, na primjer ispravnog i neispravnog poziva API-ja, zalijepite ih u alat za usporedbu teksta i usporedite po znakovima.

Cijenio bih ako biste podijelili ove stranice s prijateljima, spremili ih u favorite ili linkali na njih. Hvala! 🙏