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á.
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: ! ' ( ) * - . _ ~
| Znak | encodeURIComponent | encodeURI |
|---|---|---|
(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.