URL encode a decode

Acrafto Team Vývojáři
Aktualizováno
Kódovat jako

Pro jednu hodnotu v dotazu nebo jeden segment cesty. Kóduje vše kromě písmen, číslic a - _ . ! ~ * ' ( ), stejně jako encodeURIComponent.

Výsledek

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

  1. 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.
  2. Vyberte Směr. Zakódovat udělá z textu bezpečný řetězec do URL, Dekódovat převede caf%C3%A9%20au%20lait zpět na café au lait. Vložte do prázdného pole text se sekvencemi jako %20 a 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.
  3. 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.
  4. 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é encodeURIComponent a 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ím café & crème vznikne caf%C3%A9%20%26%20cr%C3%A8me, připravené k použití za q=.
  • 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říklad https://example.com/search?q=café au lait&lang=fr se změní na https://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ého encodeURI, které z existujícího %20 udělá %2520 a zakóduje i hranaté závorky adresy IPv6, například http://[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:

ZnakHodnota parametruCelá URLData formulářePří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+lait se dekóduje na café 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 %2B zů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 %20 stane %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 ve 100% nebo %G1, způsobí, že JavaScriptové decodeURIComponent vyhodí 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%E9 není platné UTF-8, takže decodeURIComponent selže a pythonovské unquote vrátí caf následované náhradním znakem U+FFFD. Nástroj takové bajty přečte jako Windows-1252, caf%E9 dekóduje na café 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:

ZnakZakódovaněZnakZakódovaně
mezera%20+%2B
!%21,%2C
"%22/%2F
#%23:%3A
$%24;%3B
%%25=%3D
&%26?%3F
'%27@%40
(%28[%5B
)%29]%5D
*%2Azalomení řá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.

Uvítal bych, kdybyste tyto stránky sdíleli s přáteli, uložili si je do záložek nebo na ně odkazovali. Děkuji! 🙏