URL encoder a decoder

Acrafto Team Vývojári
Aktualizované
Zakódovať ako

Pre jednu hodnotu dotazu alebo časť cesty. Zakóduje všetko okrem písmen, číslic a - _ . ! ~ * ' ( ), rovnako ako encodeURIComponent.

Výsledok

Všetko beží vo vašom prehliadači a nič, čo vložíte, sa nenahráva. Na tom záleží, pretože URL často obsahujú tokeny a ID relácií.

URL encode a decode textu online počas písania: nástroj mení medzery, znaky s diakritikou a symboly ako & či ? na sekvencie zakódované percentami, napríklad %20, a vracia ich späť na čitateľný text. Druhá záložka je parser URL. Rozdelí ľubovoľnú adresu na protokol, hostiteľa, cestu a parametre dotazu, ktoré môžete upraviť, vypnúť alebo zbaviť sledovacích značiek, a správne zakódovanú URL vám zapíše späť. Všetko sa deje vo vašom prehliadači.

Ako urobiť URL encode a decode textu

  1. Napíšte alebo vložte text do poľa na záložke Kódovanie / dekódovanie. Výsledok sa aktualizuje po každom stlačení klávesu.
  2. Vyberte Smer. Zakódovať upraví text tak, aby bol v URL bezpečný, Dekódovať premení caf%C3%A9%20au%20lait späť na café au lait. Ak do prázdneho poľa vložíte text so sekvenciami ako %20, nástroj sám prepne na Dekódovať (Radšej zakódovať prepne späť). Obyčajný text vložený v režime Dekódovať nástroj rovnako prepne na Zakódovať a tlačidlom Radšej dekódovať sa vrátite späť.
  3. Pri zakódovaní si pod Zakódovať ako vyberte, čo ten text je (pozrite nasledujúcu časť). Predvolená možnosť Hodnota parametra je správna pre jednu hodnotu dotazu.
  4. Kopírovať vloží výsledok do schránky. Prehodiť presunie výsledok do vstupu a obráti smer. Je to rýchla kontrola v oboch smeroch: dekódovaním práve zakódovaného textu musíte dostať pôvodný text.

Každý znak, ktorý nástroj zmenil, je vo výsledku zvýraznený. Keď naň prejdete kurzorom, uvidíte znak, jeho kódový bod Unicode a jeho bajty, napríklad é U+00E9 %C3%A9. Pod poľami vidíte počet Znakov, Bajtov UTF-8 a Zakódovaných znakov (alebo Dekódovaných znakov). Vyskúšať ukážku načíta vetu Cena: 50 % zľava, čaj & koláč v ponuke? Áno!, ktorá má 44 znakov, ale 49 bajtov UTF-8, pretože každé písmeno s diakritikou zaberá dva bajty.

Pri zakódovaní voľba Každý riadok zvlášť zakóduje každý riadok samostatne a zachová zalomenia riadkov, čo sa hodí na zoznam hodnôt alebo odkazov. Bez tejto voľby sa zakóduje aj zalomenie riadka a zmení sa na %0A. Keď je text URL s parametrami, nástroj ponúkne Rozdeliť na časti, čo otvorí adresu v záložke parsera.

Zakódovanie parametra URL, celej URL alebo údajov formulára

Nie každý znak treba kódovať všade. Lomka oddeľuje priečinky v ceste, ale vo vnútri hodnoty parametra je obyčajným údajom, takže správny výsledok závisí od toho, čo kódujete. Zakódovať ako ponúka štyri režimy:

  • Hodnota parametra funguje ako encodeURIComponent v JavaScripte a hodí sa pre jednu hodnotu dotazu alebo časť cesty. Zakóduje všetko okrem písmen, číslic a - _ . ! ~ * ' ( ), takže &, =, / alebo ? vo vnútri hodnoty nemôže URL rozbiť. Zakódovaním café & crème vznikne caf%C3%A9%20%26%20cr%C3%A8me, pripravené na vloženie za q=.
  • Celá URL je pre úplnú adresu, ktorú treba len upratať. Zakóduje medzery, znaky mimo ASCII, riadiace znaky, spätný apostrof a " < > \ ^ { | } a zachová všetko, čo dáva URL štruktúru: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Takže https://example.com/search?q=café au lait&lang=fr sa zmení na https://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Už zakódované sekvencie ostanú tak, ako sú, a osamelé % sa zmení na %25. Tu sa líši od encodeURI v JavaScripte, ktoré existujúce %20 zmení na %2520 a kóduje hranaté zátvorky adresy IPv6, napríklad http://[2001:db8::1]:8080/.
  • Údaje formulára sledujú formát application/x-www-form-urlencoded (po anglicky), ktorý vytvárajú formuláre HTML a URLSearchParams. Medzera sa zmení na + a nezakódované ostanú len písmená, číslice a * - . _, takže sa kódujú aj ! ' ( ) ~.
  • Prísny RFC 3986 necháva nezakódované len nevyhradené znaky podľa RFC 3986 (po anglicky): písmená, číslice a - . _ ~. OAuth 1.0 (RFC 5849) a AWS Signature Version 4 vyžadujú presne túto podobu, pretože podpis sa zhoduje, len ak obe strany kódujú ! alebo * rovnako.

Rovnaké znaky v jednotlivých režimoch:

ZnakHodnota parametraCelá URLÚdaje formuláraPrísny RFC 3986
medzera%20%20+%20
&%26&%26%26
/%2F/%2F%2F
+%2B+%2B%2B
~~~%7E~
!!!%21%21
****%2A
é%C3%A9%C3%A9%C3%A9%C3%A9

Text sa vždy kóduje ako UTF-8 a hexadecimálne číslice sú vždy veľké. Ak vstup už obsahuje sekvencie ako %20, upozornenie to oznámi a ponúkne Radšej dekódovať, aby ste text omylom nezakódovali dvakrát.

Ak chcete poslať JSON v parametri dotazu, zmenšite ho vo formátovači JSON a zakódujte ako Hodnota parametra: {"id":7,"tags":["a","b"]} sa zmení na %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Funguje to aj opačne: parameter dekódujte tu a potom ho naformátujte tam.

Problémy pri URL decode: znamienka plus, %2520 a poškodené sekvencie

Dekódovanie zvyčajne funguje bez problémov, no štyri situácie ľudí zaskočia. Nástroj každú z nich vyrieši namiesto toho, aby skončil chybou:

  • Znamienko plus znamená medzeru v údajoch formulára a vo väčšine reťazcov dotazu. Dekódovať + ako medzeru je predvolene zapnuté, takže caf%C3%A9+au+lait sa dekóduje na café au lait. V celej URL sa ako medzery počítajú len plusy za ?, pretože v ceste je plus obyčajný znak. Voľbu vypnite, keď je plus myslené doslovne. Plus zakódované ako %2B ostane vždy plusom.
  • Dvojité kódovanie vzniká, keď dve vrstvy kódu zakódujú tú istú hodnotu, pred čím RFC 3986 výslovne varuje. Každé % sa zmení na %25, takže medzera sa zmení z %20 na %2520. Ak dekódovaný výsledok stále obsahuje sekvencie ako %20, nástroj oznámi, že text bol pravdepodobne zakódovaný dvakrát, a ponúkne Dekódovať znova.
  • Neplatná sekvencia, teda %, za ktorým nenasledujú dve hexadecimálne číslice, ako v 100% alebo %G1, spôsobí, že decodeURIComponent v JavaScripte vyhodí URIError. Tu takéto sekvencie ostanú bez zmeny, označené červenou a spočítané, a zvyšok textu sa dekóduje.
  • Staré odkazy v Latin-1 pochádzajú z čias pred UTF-8, keď niektoré weby kódovali é ako jediný bajt %E9. caf%E9 nie je platné UTF-8, takže decodeURIComponent zlyhá a unquote v Pythone vráti caf a za ním náhradný znak U+FFFD. Nástroj číta takéto bajty ako Windows-1252, dekóduje caf%E9 na café a pridá o tom poznámku.

Riadiace znaky v dekódovanom texte, ako tabulátor alebo nulový bajt, sa zobrazia ako viditeľné symboly ako ␉ a ␀, ale Kopírovať skopíruje skutočný text.

Parser URL: rozdelenie URL a úprava parametrov dotazu

Vložte adresu do poľa URL na záložke Rozbor a úprava URL a rozdelí sa na Protokol, Hostiteľ, Port, Cesta a Fragment, plus Používateľ a Heslo, ak ich URL obsahuje. Hodnoty sa zobrazujú dekódované, takže táto záložka je aj najrýchlejší spôsob, ako dekódovať parametre URL: čítate bežecké topánky namiesto be%C5%BEeck%C3%A9+top%C3%A1nky. Úpravy fungujú oboma smermi, ako adresný riadok prehliadača a tabuľka parametrov v Postmane. Zmeňte pole a URL sa okamžite prepíše so správnym kódovaním. Zmeňte URL a všetky časti sa načítajú znova. Časti, ktorých sa nedotknete, ostanú presne také, aké boli, znak po znaku.

Tabuľka Parametre dotazu uvádza každý parameter v poliach Názov a Hodnota. Zrušením začiarknutia Zahrnúť do URL parameter z adresy vynecháte bez zmazania, čo pomáha, keď hľadáte ten jediný parameter, ktorý rozbíja požiadavku. Pridať parameter, Odstrániť parameter a Zoradiť A až Z robia presne to, čo naznačuje ich názov. Opakované názvy ako tag=a&tag=b a názvy bez hodnoty ako ?debug sa zachovajú. Medzery v parametroch určuje, či sa medzery zapisujú ako %20 alebo +; predvolene sa riadi vloženou URL.

Prihlasovacie a platobné odkazy často nesú v parametri druhú URL, zakódovanú tak, aby sa jej vlastné ? a & nemiešali s vonkajšími:

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

Hodnota, ktorá je sama URL, typicky v redirect_uri, return, url alebo next, dostane tlačidlo Upraviť vnorenú URL. Vnútorná adresa https://app.example.com/callback?tab=2 sa otvorí ako samostatná úroveň s vlastnými časťami a parametrami, cesta späť vedie cez navigačnú cestu (Hlavná URL › redirect_uri) a každá zmena sa zapíše späť do vonkajšej URL v zakódovanej podobe. Kopírovať hlavnú URL skopíruje výsledok. Funguje to niekoľko úrovní do hĺbky.

Keď časť za # vyzerá ako parametre, ako #access_token=...&state=... v toku OAuth implicit flow alebo #/search?q=shoes v smerovaní jednostránkových aplikácií, vypíše ich aj druhá tabuľka, Parametre fragmentu.

Parser upozorní aj na problémy: URL bez protokolu, ktorú prehliadače berú ako relatívny odkaz, port mimo rozsahu od 0 do 65535 a znaky, ktoré sa musia zakódovať, ako medzery, znaky s diakritikou, " alebo <, čo Zakódovať ich opraví jedným krokom. Text bez adresy, ako a=1&b=2, sa číta ako reťazec dotazu. Pri internacionalizovanej doméne nástroj ukáže tvar Punycode, ktorý používa DNS a prehliadače, takže münchen.de sa zmení na xn--mnchen-3ya.de, a doména začínajúca xn-- dostane čitateľný tvar.

Kopírovať URL skopíruje hotovú adresu, Otvoriť ju otvorí v novej karte (len odkazy http a https) a Kopírovať ako JSON vám dá parametre ako objekt JSON, s opakovanými názvami zhromaždenými do poľa.

Odstránenie UTM a ďalších sledovacích parametrov z URL

Odkazy z newsletterov, reklám a sociálnych sietí nesú parametre, ktoré len prezrádzajú webu, odkiaľ návštevník prišiel. Parametre UTM (po anglicky) utm_source, utm_medium, utm_campaign, utm_term a utm_content pochádzajú z Urchinu, predchodcu Google Analytics. Identifikátory kliknutia ako fbclid (Facebook), gclid (Google Ads) a msclkid (Microsoft Advertising) pridávajú samotné platformy.

Parser ich označí štítkom sledovanie a Odstrániť sledovanie (n) ich zmaže naraz. Okrem každého parametra utm_* rozpozná viac než 20 ďalších, ako ttclid (TikTok), mc_cid (Mailchimp) a _hsenc (HubSpot). Parametre, ktoré stránka potrebuje, ostanú na mieste: v odkaze na obchod z Vyskúšať ukážku Odstrániť sledovanie (4) odstráni utm_source, utm_medium, utm_campaign a fbclid a ponechá q, size, return a fragment #reviews.

Odkaz, ktorý pôjde do QR kódu, sa oplatí najprv tu vyčistiť. Bez sledovacích parametrov je kratší a kratší odkaz dá menej hustý kód, ktorý sa ľahšie skenuje.

Čo je percent-encoding a ako sa znaky menia na %XX

Percent-encoding (po anglicky), nazývaný aj URL encoding, zapisuje znak ako % a za ním dve hexadecimálne číslice. URL môže obsahovať len obmedzenú množinu znakov ASCII a niektoré z nich majú úlohu: ? začína dotaz, & oddeľuje parametre, # začína fragment. RFC 3986 ich nazýva vyhradené znaky (: / ? # [ ] @ a ! $ & ' ( ) * + , ; =). Písmená, číslice a - . _ ~ sú nevyhradené a nikdy sa nemusia kódovať. Všetko ostatné a každý vyhradený znak použitý ako obyčajný údaj sa zakóduje.

Znaky mimo ASCII sa najprv zmenia na bajty UTF-8 a každý bajt dostane vlastné %XX:

  • é je U+00E9, čo UTF-8 ukladá ako dva bajty C3 A9, takže sa zmení na %C3%A9.
  • € je U+20AC, tri bajty: %E2%82%AC.
  • Emoji ako U+1F600 (usmiata tvár) zaberá štyri bajty: %F0%9F%98%80.

%c3%a9 a %C3%A9 znamenajú to isté, ale RFC 3986 odporúča veľké písmená, čo nástroj aj píše. Tabuľka percent-encodingu znakov, s ktorými sa stretnete najčastejšie:

ZnakZakódovanýZnakZakódovaný
medzera%20+%2B
!%21,%2C
"%22/%2F
#%23:%3A
$%24;%3B
%%25=%3D
&%26?%3F
'%27@%40
(%28[%5B
)%29]%5D
*%2Azalomenie riadka%0A

URL encoding v JavaScripte, Pythone a PHP

Každý jazyk má na to funkcie a líšia sa hlavne tým, ako zaobchádzajú s medzerami, lomkami a ! ' ( ) * ~.

JavaScript má encodeURIComponent (po anglicky) pre hodnotu, encodeURI pre celú adresu a URLSearchParams pre kódovanie formulárov:

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 nemení + na medzeru a pri neplatnej sekvencii, ako 100%, vyhodí URIError.

V Pythone sú funkcie v urllib.parse. quote predvolene zachová / (safe='/') a inak zakóduje všetko okrem nevyhradených znakov RFC 3986. quote_plus zapisuje medzery ako + a kóduje aj /:

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'

V PHP urlencode kóduje tak, ako to robí formulár HTML, a medzeru zapíše ako +, zatiaľ čo rawurlencode sleduje RFC 3986 a zapíš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 dáva rovnaký výsledok ako Prísny RFC 3986. urlencode zodpovedá Údaje formulára okrem *, ktorú zakóduje ako %2A.

Často kladené otázky

Má sa medzera zakódovať ako %20 alebo +?

%20 funguje v URL všade. + znamená medzeru len v reťazci dotazu a v údajoch formulára, teda vo formáte, ktorý posielajú formuláre HTML. V ceste je + obyčajné znamienko plus, takže /a+b ostane /a+b. Keď hodnota dotazu potrebuje skutočné plus, zapíšte ho ako %2B. V nástroji Údaje formulára zapisuje medzery ako + a ostatné tri režimy ako %20.

Čo znamenajú %20, %2F a %3D v URL?

Sú to zakódované znaky: %20 je medzera, %2F lomka a %3D znak rovná sa. Ďalšie, ktoré vidíte často, sú %26 (&), %3F (?), %3A (:), %2C (čiarka) a %27 (apostrof). Dve číslice sú kód znaku v hexadecimálnej sústave. Znaky s diakritikou a ďalšie znaky mimo ASCII zaberajú dva až štyri takéto páry, ako %C3%A9 pre é. Vložte celý reťazec do dekódovača a prečítajte si ho.

Aký je rozdiel medzi encodeURI a encodeURIComponent?

encodeURI je určené pre celú adresu a znaky, ktoré ju štruktúrujú, ako : / ? # & =, nechá na pokoji. encodeURIComponent je určené pre jednu časť, hodnotu parametra alebo časť cesty, a kóduje aj tieto znaky, takže https://example.com/?a=1&b=2 sa zmení na https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. V tomto nástroji Hodnota parametra zodpovedá encodeURIComponent a Celá URL je ako encodeURI, ale zachová existujúce sekvencie ako %20 namiesto toho, aby ich zmenila na %2520.

Ako odstrániť parametre UTM z URL?

Vložte odkaz do záložky Rozbor a úprava URL a stlačte Odstrániť sledovanie (n). Naraz zmaže každú značku utm_* a identifikátory kliknutia ako fbclid a gclid. Potom stlačte Kopírovať URL. Ak chcete vynechať len niektoré, použite Odstrániť parameter na riadkoch, ktoré nechcete.

Je URL encoding to isté ako šifrovanie alebo Base64?

Nie. URL encoding nič neskrýva: ktokoľvek môže caf%C3%A9 dekódovať späť na café, takže nikdy nechráni heslo ani token. Len robí znaky bezpečnými na použitie v adrese. Base64 je iné kódovanie, ktoré mení ľubovoľné údaje, aj binárne súbory, na reťazec z 64 znakov. Reťazec Base64 v URL stále potrebuje zakódované +, / a =, pokiaľ nepoužijete variant bezpečný pre URL, ktorý vie vytvoriť kódovač a dekódovač Base64.

Nahrávajú sa alebo ukladajú URL, ktoré vložím?

Nie. Kódovanie, dekódovanie a rozbor bežia vo vašom prehliadači a nič, čo vložíte, sa neposiela na server. Na tom záleží, pretože URL často nesú prístupové tokeny, ID relácií alebo kódy na obnovenie hesla. Prehliadač si pamätá len vami vybranú záložku a voľby, nikdy texty. Jediné, čo adresu načíta, je Otvoriť, ktoré ju otvorí v novej karte rovnako, ako keby ste kliknuli na odkaz.

Ďalšie nástroje pre programátorov nájdete v kategórii Vývojári a nástroje, ktoré menia jeden formát na iný, sú zhromaždené v kategórii Prevodníky. Ak chcete zistiť, čím sa líšia dve dlhé URL, napríklad funkčné a nefunkčné volanie API, vložte ich do nástroja na porovnanie textov a porovnajte ich po znakoch.

Ocenil by som, keby ste tieto stránky zdieľali s priateľmi, uložili si ich do záložiek alebo na ne odkazovali. Ďakujem! 🙏