Přeskočit na obsah

Kodér URL: Únik speciálních znaků v URL online zdarma

Bezplatný nástroj pro únik řetězce URL pro okamžité kódování speciálních znaků. Převeďte mezery, Unicode a symboly do procenty kódovaného formátu. Ideální pro API, webové formuláře a mezinárodní URL. Vyzkoušejte nyní!

Escapování řetězce URL

Kalkulačka načítání...
📚

Dokumentace

Kódování URL: co to je a jak funguje

Kódování URL, známé také jako procentové kódování, je způsob reprezentace znaků ve webové adrese pomocí malé množiny bezpečných znaků ASCII. Funguje tak, že nebezpečný znak nahradí znakem %, za kterým následují dvě hexadecimální číslice. Tento nástroj pro kódování řetězců URL kóduje text stejným způsobem jako vestavěná funkce JavaScriptu encodeURIComponent.

Proč je třeba adresy URL kódovat

URL smí obsahovat pouze omezenou množinu znaků: písmena, číslice a několik interpunkčních znamének. Mezery, písmena s diakritikou, znaky nelatinských abeced a symboly jako & nebo = mohou při výskytu bez kódování URL narušit nebo změnit její význam. Mezery uvnitř odkazu mohou například způsobit, že prohlížeč nebo server přečte URL jako dvě oddělené části. Percentové kódování tyto znaky nahrazuje kódem, který všechny prohlížeče a servery interpretují stejně.

Znaky, které tento nástroj ponechává beze změny

Tento nástroj se následujících znaků nikdy nedotýká. Procházejí beze změny:

  • Velká a malá písmena: A–Z, a–z
  • Číslice: 0–9
  • Interpunkční znaménka - . _ ~ ! * ' ( )

Všechny ostatní znaky se kódují pomocí procent, včetně:

  • Mezery a interpunkčních znamének, jako jsou : / ? # [ ] @ $ & + , ; =
  • Písmena s diakritikou a všechny ostatní neASCII znaky nebo znaky Unicode
  • Samotný znak %, který se vždy převede na %25, i když už byl součástí sekvence kódované pomocí procent

Některé obecné příručky k syntaxi URL řadí znaky ! * ' ( a ) spolu s dalšími interpunkčními znaménky mezi znaky, které „mohou v některých kontextech vyžadovat kódování“. Tento konkrétní nástroj je nekóduje, protože se řídí pravidly encodeURIComponent, podle nichž jsou považovány za bezpečné.

Jak vypočítat řetězec s procentovým kódováním (vzorec)

Nástroj kontroluje každý znak vstupu jednotlivě a použije toto pravidlo:

  1. Pokud znak patří mezi výše uvedené znaky, které se nemění, ponechá se beze změny.
  2. V opačném případě se znak převede na bajtovou sekvenci UTF-8. Písmena latinky s diakritikou, řecká, cyrilice a arabská písmena používají dva bajty. Čínské, japonské a korejské znaky používají tři. Emoji používají čtyři.
  3. Každý bajt se zapíše jako dvoumístné hexadecimální číslo.
  4. Před každou dvojici hexadecimálních číslic se vloží %.
  5. Výsledky se spojí ve správném pořadí a vytvoří kódovaný řetězec.

Příklad výpočtu

Vstup: Jürgen & Björk

Postup znak po znaku:

ZnakVýsledek
JJ (beze změny)
ü%C3%BC (bajty UTF-8 0xC3, 0xBC)
rgenrgen (beze změny)
(mezera)%20
&%26
(mezera)%20
BjBj (beze změny)
ö%C3%B6 (bajty UTF-8 0xC3, 0xB6)
rkrk (beze změny)

Výstup: J%C3%BCrgen%20%26%20Bj%C3%B6rk

Druhý příklad ukazuje, jak funguje množina znaků ponechávaných beze změny. Kódování řetězce -_.!~*'() vytvoří -_.!~*'(), tedy přesně stejný text, protože každý jeho znak patří do množiny nevyhrazených znaků. Kódování řetězce 100% vytvoří 100%25, protože samotný znak % není bezpečný.

Dekódování řetězce kódovaného pomocí procent

Dekódování proces obrací: každá sekvence %XX se přečte jako hexadecimální bajt, bajty se znovu seskupí do původního znaku UTF-8 a znak nahradí danou sekvenci. Například %C3%BC se dekóduje zpět na ü a %20 se dekóduje na mezeru. Tento nástroj pouze kóduje; k opačnému procesu je zapotřebí samostatný dekodér.

Běžná použití

Percentové kódování se používá vždy, když se text zadaný člověkem, nikoli text napsaný programátorem, má stát součástí URL:

  • Vyhledávací pole, která vkládají hledaný výraz do adresního řádku, například ?q=shoes%20%26%20bags
  • Parametry dotazu obsahující jména, adresy nebo jiná uživatelská data
  • Odkazy na stránky s názvy v jazycích používajících písmena s diakritikou nebo nelatinská písma
  • Požadavky API, které předávají tokeny nebo identifikátory jako součást URL

Příklady kódu

1// JavaScript
2encodeURIComponent("Jürgen & Björk");
3// "J%C3%BCrgen%20%26%20Bj%C3%B6rk"
4

Funkce quote v Pythonu vždy ponechává písmena, číslice a znaky - . _ ~ beze změny. Pět dalších znaků ! * ' ( ) je třeba uvést v safe, aby výsledek odpovídal tomuto nástroji. Bez nich funkce quote vrací místo toho %21 %2A %27 %28 %29.

Dějiny

Myšlenka kódování nebezpečných znaků v URL sahá k RFC 1738 z roku (4 410 cm) 1994, jednomu z prvních dokumentů definujících formát URL. RFC 3986, vydané v roce 2005, pravidla aktualizovalo a formálně definovalo množinu „nevyhrazených“ znaků, které nikdy nevyžadují kódování. encodeURIComponent, funkce JavaScriptu, na níž je tento nástroj založen, používá o něco širší množinu nevyhrazených znaků než RFC 3986: nekóduje také ! * ' ( a ), v souladu s dřívější verzí specifikace URI.

Často kladené otázky

Jaký je rozdíl mezi kódováním URL a escapováním URL? Je to totéž. Oba termíny označují percentové kódování, při němž je znak nahrazen znakem % následovaným dvěma hexadecimálními číslicemi.

Proč tento nástroj ponechává znaky !, *, ', ( a ) beze změny? Tento nástroj používá encodeURIComponent, která těchto pět znaků považuje za bezpečné a ponechává je přesně tak, jak byly zadány. Jiné kódovací funkce a některé servery mohou stále očekávat jejich zakódování, takže pokud to způsobuje problém, zkontrolujte cílový systém.

Jaký je rozdíl mezi %20 a + v případě mezery? Oba zápisy představují mezeru. %20 je obecný zápis mezery pomocí percentového kódování. Znak + je zvláštní případ používaný pouze v datech application/x-www-form-urlencoded, tedy ve formátu používaném při odesílání formulářů HTML, nikoli tímto nástrojem.

Dekóduje tento nástroj text, který už byl zakódován? Ne. Pouze kóduje. Pokud vstup již obsahuje znak %, je tento % považován za doslovný znak a ve výstupu se převede na %25, místo aby zůstal beze změny.

Jak se zpracovávají nelatinské znaky, například čínský nebo arabský text? Každý znak se nejprve převede na bajtovou sekvenci UTF-8 a poté se každý bajt zakóduje pomocí procent. Čínský znak používá tři bajty, takže vytvoří tři skupiny %XX. Arabské písmeno používá dva bajty, takže vytvoří dvě.

Kdy nástroj odmítne text zakódovat? K tomu dochází pouze v případě, že text obsahuje polovinu náhradního páru. Náhradní pár je dvojice kódových jednotek, v níž se ukládá znak s kódem vyšším než U+FFFF, například emoji. Samostatná polovina nemá platnou podobu UTF-8, takže nástroj místo výsledku zobrazí chybu. Běžným psaním takový znak vytvořit nelze; obvykle pochází z neúplného kopírování nebo poškozeného odkazu.

Mám zakódovat celou URL, nebo jen její část? Kódujte pouze části obsahující uživatelská data, například hodnoty dotazu nebo segmenty cesty, nikoli části tvořící strukturu URL, jako jsou https:// a název domény. Zakódování celé URL pomocí kodéru pro jednotlivé části URL by také převedlo její znaky :, / a ? na kódy v percentovém zápisu a adresu by narušilo.

Reference

  1. RFC 3986 — Uniform Resource Identifier (URI): Generic Syntax
  2. Percentové kódování — Wikipedie
  3. MDN — encodeURIComponent()
  4. Standard URL — WHATWG