UltKit

Kódování a dekódování URL

Upravte text tak, aby se dal bezpečně vložit do URL, nebo převeďte sekvence typu %20 zpět na čitelné znaky. Nástroj používá vestavěné funkce vašeho prohlížeče encodeURIComponent, encodeURI a decodeURIComponent, zobrazí parametry dotazu v tabulce a na server nic neodesílá.

Režim

0 znaků · 0 slov · 0 řádků

0 znaků · 0 slov · 0 řádků

Vše běží přímo v této záložce prohlížeče. Váš text se nikam nenahrává ani neukládá.

Co která funkce escapuje

Vypočteno přímo funkcemi prohlížeče. encodeURIComponent nechává beze změny písmena, číslice a tyto znaky: ! ' ( ) * - . _ ~

ZnakencodeURIComponentencodeURI
(mezera)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

Procentové kódování a rezervované znaky podle RFC 3986

URL smí obsahovat jen omezenou sadu znaků ASCII. RFC 3986, specifikace syntaxe URI z roku 2005, je dělí do dvou skupin. Nevyhrazené znaky, tedy A–Z, a–z, 0–9 a čtyři značky - . _ ~, se kódovat nikdy nemusejí. Vyhrazené znaky mají svou úlohu: obecné oddělovače : / ? # [ ] @ oddělují schéma, hostitele, cestu, dotaz a fragment, zatímco pododdělovače ! $ & ' ( ) * + , ; = oddělují položky uvnitř nich, jako to dělají & a = v dotazu (query string). Vše ostatní a také každý vyhrazený znak použitý jako obyčejná data se musí zakódovat procentovým kódováním.

Procentové kódování zapíše bajt jako % následované dvěma hexadecimálními číslicemi. Text se nejprve převede do UTF-8, takže mezera se změní na %20, znak é (dva bajty) na %C3%A9 a emoji na čtyři skupiny %XX. Proto se hledaný výraz „café & bar“ v odkazu objeví jako caf%C3%A9%20%26%20bar: znak & je zakódován, aby ho server nepovažoval za začátek nového parametru.

encodeURIComponent, encodeURI a dekódování

encodeURIComponent je správná volba pro jednotlivou část, například hodnotu dotazu, segment cesty nebo adresu přesměrování předávanou jako parametr. Zakóduje vše kromě nevyhrazených znaků a ! ' ( ) *, které JavaScript z historických důvodů nechává být. encodeURI (celá URL) předpokládá, že vstup je už úplná adresa, a vyhrazené znaky ponechá beze změny, takže u https://example.com/a b?q=1 se zakóduje jen mezera. Použít encodeURI na hodnotu parametru je klasická chyba: znak & nebo # uvnitř hodnoty by zůstal a URL by rozbil.

Dekódovat vrátí zpět obě funkce. Formuláře HTML odeslané metodou GET používají starší formát application/x-www-form-urlencoded, ve kterém se mezera zapisuje jako + místo %20; pro ně nechte zaškrtnuté Považovat + za mezeru a zrušte to, když záleží na skutečném znaku plus, například v telefonním čísle. Pokud vstup obsahuje % bez dvou hexadecimálních číslic nebo bajty, které nejsou platné UTF-8, dekódování selže s jasnou zprávou, místo aby hádalo. Pokud text obsahuje dotaz (query string), jeho parametry se zobrazí dekódované v tabulce pod nástrojem. Pro binární data v URL je obvyklou alternativou Base64url.

Často kladené otázky

Má být mezera v URL zapsaná jako %20, nebo jako znaménko plus?
V cestách a podle RFC 3986 je mezera %20. Tvar + znamená mezeru jen v dotazech kódovaných tak, jak kódují formuláře HTML, takže %20 je bezpečná volba všude.
Proč se v mé URL objevilo %2520?
Bylo zakódováno dvakrát. První průchod změnil mezeru na %20 a druhý zakódoval samotné % jako %25. Jedním dekódováním zbytečnou vrstvu odstraníte; hodnoty kódujte v kódu jen na jednom místě.
Které znaky nikdy není nutné procentově kódovat?
Nevyhrazená sada podle RFC 3986: písmena A až Z velká i malá, číslice 0 až 9 a pomlčka, tečka, podtržítko a vlnovka.
Může URL obsahovat písmena s diakritikou bez kódování?
Prohlížeče je zobrazují, ale při přenosu se každý znak mimo ASCII v cestě nebo dotazu odesílá jako procentově kódované UTF-8. Doménová jména používají samostatný systém, Punycode, který je převádí na štítky xn--.
Proč dekódování hlásí chybnou sekvenci?
Text obsahuje % bez dvou hexadecimálních číslic, například doslovné „100 %“, nebo se bajty dekódují na neplatné UTF-8. Osamocená % zakódujte před dekódováním jako %25.