URL
URL kodér
Procentuálně kódujte a dekódujte URL.
O procentuálním kódování
Procentuální kódování (neboli URL kódování) nahrazuje znaky, které nejsou v URL bezpečné — mezery, &, ?, # neASCII znaky a další — znakem % následovaným jejich hexadecimální bajtovou hodnotou. Díky tomu mohou query stringy a segmenty cesty nést libovolný text, aniž by narušily syntaxi samotné URL.
Ne každý znak je potřeba kódovat a přesná množina znaků ponechaných beze změny závisí na kontextu. RFC 3986 označuje písmena, číslice a - _ . ~ jako vždy bezpečné; vše ostatní v „rezervované“ množině (jako / ? # &) je bezpečné jen tam, kde ještě neplní syntaktickou roli. Existuje i zvláštnost typická pro formuláře: application/x-www-form-urlencoded, formát, ve kterém prohlížeče odesílají HTML formuláře, kóduje mezeru jako + místo %20 — konvence platná jen pro tento konkrétní typ obsahu, ne pro URL obecně.
Kde se s tím setkáte
- Hodnoty query stringu obsahující mezery, symboly nebo neLatinkový text
- Odesílání formulářů jako application/x-www-form-urlencoded
- Kódování přesměrovacích URL nebo tokenů předávaných jako parametry URL
- Bezpečné vložení cest k souborům nebo vyhledávaných výrazů do odkazu
Často kladené otázky
Je procentuální kódování totéž jako Base64?
Ne — řeší různé problémy. Procentuální kódování escapuje konkrétní nebezpečné znaky v jinak čitelném textu; Base64 překóduje celá binární data do pevné abecedy.
Proč některé znaky zůstávají stejné?
Písmena, číslice a několik symbolů (- _ . ~) jsou definovány jako vždy bezpečné v URL, a proto zůstávají nezměněné.
Kóduje se tím celá URL, nebo jen její část?
Jen text, který vložíte jako hodnotu. Kódování celé URL by zakódovalo i lomítka a dvojtečky, které musí zůstat doslovné — použijte to tedy na jednotlivé hodnoty parametrů, ne na celou adresu.
Proč se mezera někdy zakóduje jako + a jindy jako %20?
Obojí je platné, jen na jiném místě. V cestě nebo v řetězci dotazu (query string) URL se mezera správně kóduje jako %20. Zkratka + patří výhradně k formátu application/x-www-form-urlencoded, ve kterém se odesílají HTML formuláře; tam se musí i samotný znak + zakódovat jako %2B, aby nevznikla nejednoznačnost. Tento nástroj vytváří %20, což je vždy správně; pokud si ručně sestavujete tělo kódované jako formulář, nahraďte zakódované mezery znakem +.