URL encode a decode
Pro jednu hodnotu v dotazu nebo jeden segment cesty. Kóduje vše kromě písmen, číslic a - _ . ! ~ * ' ( ), stejně jako encodeURIComponent.
Vložte nahoře URL. Její části a parametry se zobrazí tady a půjdou upravit.
Parametry dotazu
Tato URL nemá žádné parametry dotazu.
Parametry fragmentu
Vše běží ve vašem prohlížeči a nic, co vložíte, se nenahrává. Na tom záleží, protože URL často obsahují tokeny a ID relací.
URL encode a decode online přímo při psaní: nástroj při kódování URL mění mezery, písmena s diakritikou a symboly jako & nebo ? na sekvence s procentem, například %20, a stejně snadno je převede zpět na čitelný text. Druhá záložka rozebere libovolnou adresu na protokol, hostitele, cestu a parametry dotazu. Parametry můžete upravovat, vypínat nebo z nich odstranit sledovací značky a nástroj vám zapíše zpět správně zakódovanou URL. Vše probíhá ve vašem prohlížeči.
Jak URL zakódovat a dekódovat
- Napište nebo vložte text do pole na záložce Kódování / Dekódování. Výsledek se mění s každou stisknutou klávesou.
- Vyberte Směr. Zakódovat udělá z textu bezpečný řetězec do URL, Dekódovat převede
caf%C3%A9%20au%20laitzpět nacafé au lait. Vložte do prázdného pole text se sekvencemi jako%20a nástroj sám přepne na Dekódovat (tlačítko Raději zakódovat vás vrátí zpět). Když v režimu Dekódovat vložíte obyčejný text, který je potřeba zakódovat, nástroj stejně tak přepne na Zakódovat a nabídne Raději dekódovat. - Při kódování zvolte v nabídce Kódovat jako, co ten text představuje (viz další část). Výchozí volba Hodnota parametru se hodí pro jednu hodnotu v dotazu.
- Kopírovat vloží výsledek do schránky. Prohodit přesune výsledek do vstupu a obrátí směr. Je to rychlá zkouška správnosti: dekódováním právě zakódovaného textu musíte dostat původní text.
Každý znak, který nástroj změnil, je ve výsledku zvýrazněný. Najeďte na něj myší a uvidíte znak, jeho kódový bod Unicode a jeho bajty, například é U+00E9 %C3%A9. Pod poli vidíte počet Znaků, Bajtů UTF-8 a Zakódovaných znaků (nebo Dekódovaných znaků). Vyzkoušet ukázku načte větu Sleva 50 %, čaj & řízek? Ano, hned!, která má 35 znaků, ale 38 bajtů UTF-8, protože každé písmeno s diakritikou zabere dva bajty.
Volba Každý řádek zvlášť zakóduje každý řádek samostatně a zachová zalomení řádků, což se hodí pro seznam hodnot nebo odkazů. Bez ní se zakóduje i zalomení řádku a změní se na %0A. Když je text URL s parametry, nástroj nabídne Rozdělit na části, což otevře adresu v záložce s rozborem.
Kódování parametru URL, celé URL nebo dat formuláře
Ne každý znak je třeba kódovat všude. Lomítko odděluje složky v cestě, ale uvnitř hodnoty parametru je to obyčejný znak, takže správný výsledek závisí na tom, co kódujete. Nabídka Kódovat jako má čtyři režimy:
- Hodnota parametru funguje jako JavaScriptové
encodeURIComponenta hodí se pro jednu hodnotu v dotazu nebo jeden segment cesty. Zakóduje vše kromě písmen, číslic a- _ . ! ~ * ' ( ), takže&,=,/nebo?uvnitř hodnoty nemůže URL rozbít. Zakódovánímcafé & crèmevzniknecaf%C3%A9%20%26%20cr%C3%A8me, připravené k použití zaq=. - Celá URL je pro úplnou adresu, kterou stačí jen vyčistit. Zakóduje mezery, znaky mimo ASCII, řídicí znaky, zpětný apostrof a
" < > \ ^ { | }a ponechá vše, co dává URL strukturu:: / ? # [ ] @ ! $ & ' ( ) * + , ; =. Napříkladhttps://example.com/search?q=café au lait&lang=frse změní nahttps://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Již zakódované sekvence zůstanou, jak jsou, a samotné%se změní na%25. V tom se liší od JavaScriptovéhoencodeURI, které z existujícího%20udělá%2520a zakóduje i hranaté závorky adresy IPv6, napříkladhttp://[2001:db8::1]:8080/. - Data formuláře odpovídají formátu application/x-www-form-urlencoded (anglicky), který vytvářejí HTML formuláře a
URLSearchParams. Mezera se změní na+a nezakódované zůstanou jen písmena, číslice a* - . _, takže se kódují i! ' ( ) ~. - Přísné RFC 3986 nechává nezakódované jen nevyhrazené znaky podle RFC 3986 (anglicky): písmena, číslice a
- . _ ~. Přesně tento tvar vyžadují OAuth 1.0 (RFC 5849) a AWS Signature Version 4, protože podpis sedí, jen když obě strany kódují!nebo*stejně.
Tytéž znaky v jednotlivých režimech:
| Znak | Hodnota parametru | Celá URL | Data formuláře | Přísné RFC 3986 |
|---|---|---|---|---|
| mezera | %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 se vždy kóduje jako UTF-8 a šestnáctkové číslice se vždy píšou velkými písmeny. Pokud vstup už obsahuje sekvence jako %20, upozornění to oznámí a nabídne Raději dekódovat, abyste text omylem nezakódovali dvakrát.
Chcete-li předat JSON v parametru dotazu, minifikujte ho ve formátovači JSON a zakódujte jako Hodnota parametru: {"id":7,"tags":["a","b"]} se změní na %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Funguje to i obráceně: parametr tady dekódujte a tam zformátujte.
Problémy při URL decode: plus, %2520 a poškozené sekvence
Dekódování obvykle prostě funguje, ale čtyři situace lidi zaskočí. Nástroj si s každou poradí, místo aby skončil chybou:
- Znaménko plus znamená mezeru v datech formulářů a ve většině řetězců dotazu. Volba Dekódovat + jako mezeru je ve výchozím stavu zapnutá, takže
caf%C3%A9+au+laitse dekóduje nacafé au lait. V celé URL se za mezery počítají jen plusy za znakem?, protože v cestě je plus obyčejný znak. Pokud je plus myšleno doslova, volbu vypněte. Plus zakódované jako%2Bzůstane plusem vždy. - Dvojité kódování vzniká, když dvě vrstvy kódu zakódují tutéž hodnotu, před čímž výslovně varuje i RFC 3986. Každé
%se změní na%25, takže se z mezery%20stane%2520. Pokud dekódovaný výsledek stále obsahuje sekvence jako%20, nástroj upozorní, že text byl nejspíš zakódovaný dvakrát, a nabídne Dekódovat znovu. - Neplatná sekvence, tedy
%bez dvou šestnáctkových číslic jako ve100%nebo%G1, způsobí, že JavaScriptovédecodeURIComponentvyhodí URIError. Tady se takové sekvence ponechají beze změny, označí se červeně a spočítají a zbytek textu se dekóduje. - Staré odkazy v Latin-1 pocházejí z doby před UTF-8, kdy některé weby kódovaly
éjako jediný bajt%E9.caf%E9není platné UTF-8, takžedecodeURIComponentselže a pythonovskéunquotevrátícafnásledované náhradním znakem U+FFFD. Nástroj takové bajty přečte jako Windows-1252,caf%E9dekóduje nacaféa přidá poznámku, že to udělal.
Řídicí znaky v dekódovaném textu, například tabulátor nebo nulový bajt, se zobrazí jako viditelné symboly ␉ a ␀, ale Kopírovat zkopíruje skutečný text.
Rozbor URL: rozdělení adresy a úprava parametrů dotazu
Vložte adresu do pole URL na záložce Rozbor a úprava URL a nástroj ji rozdělí na pole Protokol, Hostitel, Port, Cesta a Fragment, a pokud je URL obsahuje, také Uživatelské jméno a Heslo. Hodnoty se zobrazují dekódované, takže je záložka také nejrychlejším způsobem, jak dekódovat parametry URL: místo b%C4%9B%C5%BEeck%C3%A9+boty přečtete běžecké boty. Úpravy fungují oběma směry, jako adresní řádek a tabulka parametrů v Postmanu. Když změníte pole, URL se hned přepíše a správně zakóduje; když změníte URL, všechny části se načtou znovu. Části, kterých se nedotknete, zůstanou přesně takové, jaké byly, znak po znaku.
Tabulka Parametry dotazu vypisuje každý parametr ve sloupcích Název a Hodnota. Zrušte zaškrtnutí políčka Zahrnout do URL a parametr se vynechá, aniž byste ho mazali, což pomáhá při hledání parametru, který požadavek rozbíjí. Tlačítka Přidat parametr, Odebrat parametr a Seřadit od A do Z dělají přesně to, co slibují. Opakované názvy jako tag=a&tag=b a názvy bez hodnoty jako ?debug se zachovají. Volba Mezery v parametrech určuje, zda se mezery zapisují jako %20, nebo +; ve výchozím stavu se řídí vloženou URL.
Odkazy pro přihlášení a platby často nesou uvnitř parametru druhou URL, zakódovanou tak, aby se její ? a & nepletly s těmi vnějšími:
https://auth.example.com/authorize?client_id=abc&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Ftab%3D2
Hodnota, která je sama URL, obvykle v redirect_uri, return, url nebo next, dostane tlačítko Upravit URL uvnitř. Vnitřní adresa https://app.example.com/callback?tab=2 se otevře jako samostatná úroveň s vlastními částmi a parametry, drobečková navigace (Hlavní URL › redirect_uri) vede zpět a každá změna se zakóduje a zapíše do vnější URL. Kopírovat hlavní URL zkopíruje výsledek. Funguje to i do několika úrovní.
Když část za # vypadá jako parametry, například #access_token=...&state=... v implicitním toku OAuth nebo #/search?q=shoes v trasách jednostránkových aplikací, vypíše je i druhá tabulka, Parametry fragmentu.
Rozbor také upozorní na problémy: URL bez protokolu, kterou prohlížeče berou jako relativní odkaz; port mimo rozsah 0 až 65535; a znaky, které se musí kódovat, například mezery, písmena s diakritikou, " nebo <; ty jedním krokem opraví tlačítko Zakódovat je. Text bez adresy, například a=1&b=2, se přečte jako řetězec dotazu. U internacionalizovaného doménového jména nástroj zobrazí tvar v Punycode, který používají DNS a prohlížeče, takže münchen.de se změní na xn--mnchen-3ya.de, a doména začínající xn-- dostane svůj čitelný tvar.
Kopírovat URL zkopíruje hotovou adresu, Otevřít ji otevře na nové kartě (jen odkazy http a https) a Kopírovat jako JSON vám dá parametry jako objekt JSON, kde se opakované názvy sloučí do pole.
Jak odstranit UTM a další sledovací parametry z URL
Odkazy z newsletterů, reklam a sociálních sítí nesou parametry, které webu jen říkají, odkud návštěvník přišel. Parametry UTM (anglicky) utm_source, utm_medium, utm_campaign, utm_term a utm_content sahají k Urchinu, předchůdci Google Analytics. Identifikátory kliknutí jako fbclid (Facebook), gclid (Google Ads) a msclkid (Microsoft Advertising) přidávají samotné platformy.
Rozbor je označí štítkem sledování a tlačítko Odstranit sledování (n) je smaže všechny najednou. Kromě každého parametru utm_* rozpozná více než 20 dalších, například ttclid (TikTok), mc_cid (Mailchimp) a _hsenc (HubSpot). Parametry, které stránka potřebuje, zůstanou na místě: v odkazu na obchod z Vyzkoušet ukázku tlačítko Odstranit sledování (4) odstraní parametry utm_source, utm_medium, utm_campaign a fbclid a ponechá q, size, return a fragment #reviews.
Odkaz, který půjde do QR kódu, se vyplatí nejdřív vyčistit tady. Bez sledovacích parametrů je kratší a kratší odkaz dává řidší kód, který se snáz naskenuje.
Co je procentové kódování a jak se ze znaků stanou %XX
Procentové kódování, neboli kódování URL, zapíše znak jako % následované dvěma šestnáctkovými číslicemi. URL smí obsahovat jen omezenou sadu znaků ASCII a některé z nich mají svou úlohu: ? zahajuje dotaz, & odděluje parametry, # zahajuje fragment. RFC 3986 jim říká vyhrazené znaky (: / ? # [ ] @ a ! $ & ' ( ) * + , ; =). Písmena, číslice a - . _ ~ jsou nevyhrazené a kódovat se nikdy nemusí. Všechno ostatní a každý vyhrazený znak použitý jako obyčejná data se zakóduje.
Znaky mimo ASCII se nejprve převedou na bajty UTF-8 a každý bajt dostane vlastní %XX:
éje U+00E9, které UTF-8 uloží jako dva bajty C3 A9, takže se změní na%C3%A9.€je U+20AC, tři bajty:%E2%82%AC.- Emoji, například U+1F600 (usměvavá tvář), zabere čtyři bajty:
%F0%9F%98%80.
%c3%a9 a %C3%A9 znamenají totéž, ale RFC 3986 doporučuje velká písmena a ta nástroj také píše. Tabulka procentového kódování znaků, které potkáte nejčastěji:
| Znak | Zakódovaně | Znak | Zakódovaně |
|---|---|---|---|
| mezera | %20 | + | %2B |
! | %21 | , | %2C |
" | %22 | / | %2F |
# | %23 | : | %3A |
$ | %24 | ; | %3B |
% | %25 | = | %3D |
& | %26 | ? | %3F |
' | %27 | @ | %40 |
( | %28 | [ | %5B |
) | %29 | ] | %5D |
* | %2A | zalomení řádku | %0A |
Kódování URL v JavaScriptu, Pythonu a PHP
Každý jazyk na to má funkce, které se liší hlavně tím, jak zacházejí s mezerami, lomítky a znaky ! ' ( ) * ~.
JavaScript má encodeURIComponent (anglicky) pro hodnotu, encodeURI pro celou adresu a URLSearchParams pro kódování formulářů:
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 nepřevádí + na mezeru a při neplatné sekvenci, jako je 100%, vyhodí URIError.
V Pythonu jsou funkce v modulu urllib.parse. quote ve výchozím stavu ponechává / (safe='/') a jinak kóduje vše kromě nevyhrazených znaků podle RFC 3986. quote_plus zapisuje mezery jako + a kóduje 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'
V PHP urlencode kóduje tak, jak to dělá HTML formulář, a mezeru zapíše jako +, zatímco rawurlencode se řídí 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ává stejný výsledek jako Přísné RFC 3986. urlencode odpovídá režimu Data formuláře s výjimkou *, které zakóduje jako %2A.
Časté otázky
Kódovat mezeru jako %20, nebo +?
%20 funguje v URL všude. + znamená mezeru jen v řetězci dotazu a v datech formuláře, tedy ve formátu, který posílají HTML formuláře. V cestě je + obyčejné plus, takže /a+b zůstane /a+b. Když hodnota dotazu potřebuje skutečné plus, zapište ho jako %2B. V nástroji zapisují mezery jako + jen Data formuláře, ostatní tři režimy jako %20.
Co znamenají %20, %2F a %3D v URL?
Jsou to zakódované znaky: %20 je mezera, %2F lomítko a %3D rovnítko. Další, které vídáte často, jsou %26 (&), %3F (?), %3A (:), %2C (čárka) a %27 (apostrof). Dvě číslice jsou kód znaku v šestnáctkové soustavě. Písmena s diakritikou a další znaky mimo ASCII zabírají dva až čtyři takové páry, například %C3%A9 pro é. Vložte celý řetězec do dekodéru a přečtete si ho.
Jaký je rozdíl mezi encodeURI a encodeURIComponent?
encodeURI je určeno pro celou adresu a znaky, které ji strukturují, například : / ? # & =, nechává být. encodeURIComponent je určeno pro jednu část, hodnotu parametru nebo segment cesty, a kóduje i tyto znaky, takže https://example.com/?a=1&b=2 se změní na https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. V tomto nástroji odpovídá encodeURIComponent režim Hodnota parametru a Celá URL je jako encodeURI, ale ponechává existující sekvence jako %20, místo aby je měnila na %2520.
Jak odstranit UTM parametry z URL?
Vložte odkaz na záložku Rozbor a úprava URL a stiskněte Odstranit sledování (n). Smaže najednou všechny značky utm_* i identifikátory kliknutí jako fbclid a gclid. Potom stiskněte Kopírovat URL. Chcete-li vyřadit jen některé, použijte Odebrat parametr u řádků, které nechcete.
Je kódování URL totéž co šifrování nebo Base64?
Ne. Kódování URL nic neskrývá: kdokoli dekóduje caf%C3%A9 zpět na café, takže nikdy nechrání heslo ani token. Jen zajišťuje, že znaky lze bezpečně použít v adrese. Base64 je jiné kódování, které promění libovolná data, včetně binárních souborů, v řetězec o 64 znacích. Řetězec Base64 v URL musí mít stále zakódované +, / a =, pokud nepoužijete variantu bezpečnou pro URL, kterou umí vytvořit kodér a dekodér Base64.
Nahrávají se vložené URL někam nebo ukládají?
Ne. Kódování, dekódování a rozbor běží ve vašem prohlížeči a nic, co vložíte, se neodesílá na server. Na tom záleží, protože URL často nesou přístupové tokeny, ID relací nebo kódy pro obnovu hesla. Prohlížeč si pamatuje jen vybranou záložku a volby, nikdy texty. Adresu načítá jedině Otevřít, které ji otevře na nové kartě stejně, jako byste na odkaz klikli.
Další nástroje pro programátory najdete v kategorii Vývojáři a nástroje, které převádějí jeden formát na jiný, jsou sebrané v kategorii Převodníky. Chcete-li zjistit, čím se liší dvě dlouhé URL, například funkční a nefunkční volání API, vložte je do nástroje pro porovnání textů a porovnejte je po znacích.