Kódování v URL: co ve skutečnosti znamenají %20, + a %2F
Procentuální kódování zapisuje znak, který URL nemůže bezpečně nést, jako znak procenta následovaný jeho bajtovou hodnotou v hexadecimální soustavě. Mezera se změní na %20, ampersand na %26 a lomítko na %2F. Kódování chrání strukturu odkazu, protože znaky jako & a = oddělují části řetězce dotazu.
Které znaky mohou zůstat beze změny
Standard URI (RFC 3986), na kterém jsou URL postavena, ponechává některé znaky beze změny: písmena A až Z a a až z, číslice a čtyři znaky - _ . ~. Ty se nikdy nemusí kódovat. Jiné znaky v URL mají svou funkci. Dvojtečka odděluje schéma od zbytku, lomítko odděluje části cesty, otazník začíná dotaz, křížek začíná fragment a & a = rozdělují dotaz na názvy a hodnoty. Znak s funkcí je nutné zakódovat, pokud ho myslíte jako data, a ne jako strukturu.
Proto může být stejný znak na jednom místě zakódován a na jiném ne. V hodnotě dotazu musí být ampersand %26, jinak se odkaz rozdělí na špatném místě. V cestě odkazu je to jen obyčejný znak.
Písmena mimo angličtinu
Písmena mimo základní angličtinu se kódují jako jejich bajty UTF-8 a každý bajt se zapíše jako procentuální kód. Písmeno é ve slově café tvoří dva bajty C3 a A9, takže se změní na %C3%A9 a celé slovo na caf%C3%A9.
Jednoduchý příklad ukazuje pravidla v praxi. Text a b&c=d/é, zakódovaný jako komponenta, se změní na a%20b%26c%3Dd%2F%C3%A9. Zakóduje se každý znak, který není bezpečné písmeno, číslice nebo značka: mezera, ampersand, rovnítko, lomítko i písmeno s diakritikou.
Komponenta, nebo celá URL
Existují dva druhy kódování a každý má svůj důvod. Kódování komponenty bere každý vyhrazený znak jako data. Použijte ho pro jednu hodnotu, například hledaný výraz nebo název souboru uvnitř odkazu. Zakódování „rock & roll“ jako hledaného výrazu dá rock%20%26%20roll, takže ampersand zůstane uvnitř hodnoty.
Kódování celé URL zachovává strukturu. Zakódování https://example.com/a b dá https://example.com/a%20b, lomítka i dvojtečka zůstanou beze změny. Použijte ho pro úplnou adresu, kterou je potřeba opravit, ne pro hodnotu, která patří dovnitř odkazu.
Nástroj Kódování a dekódování URL má proto nastavení Komponenta a Celá URL. Dekódování celé URL také ponechává zakódované strukturní znaky jako %26 a %3D, takže odkaz po dekódování stále funguje.
Plusy a data formulářů
Webové formuláře používají jinou konvenci. Když se formulář odesílá jako data formuláře, mezera se zapisuje jako +, ne jako %20. Skutečné znaménko plus se pak zapíše jako %2B. Fráze C++ tips se tedy v datech formuláře změní na C%2B%2B+tips a v prosté komponentě kódování na C%2B%2B%20tips.
Dekódování má stejný rozdíl. V řetězci dotazu + obvykle znamená mezeru. V cestě odkazu je + znaménko plus. Nástroj čte + jako mezeru jen tehdy, když je zaškrtnuté Použít + pro mezery (data formuláře), takže tuto volbu nechte vypnutou u cest a u hodnot, kde je plus skutečné.
Čtení dlouhého řetězce dotazu
Odkaz často nese své nastavení za otazníkem. Vezměte tento příklad:
https://shop.example/search?q=red%20shirt&size=M&tag=summer%2Bsale
Po dekódování znamená, že se hledá červená košile, velikost je M a štítek je summer+sale. %2B zůstane znaménkem plus, protože bylo zakódováno. Vložte odkaz do nástroje Kódování a dekódování URL a po dekódování vypíše každý název a hodnotu, takže se dlouhý odkaz čte snadno. Pokud chcete jen kratší adresu bez sledovacích parametrů, nejprve vyčistěte odkaz.
Dvojité kódování
Nejčastější chyba je zakódovat hodnotu dvakrát. Zakódování textu %20 znovu dá %2520, protože samotné znaménko procenta se zakóduje jako %25. Stránka pak v hodnotě hledá doslovné %20 a hledání nebo stránka nesedí. Dekódujte odkaz jednou, zkontrolujte výsledek a hodnotu kódujte jen tehdy, když to opravdu potřebujete.
Poškozené escape sekvence
Znak procenta musí být následován dvěma hexadecimálními číslicemi a číslice pro písmena s diakritikou musí tvořit platné UTF-8. Odkaz, který byl useknutý, nebo náhodné procento vložené do textu, může zanechat poškozenou escape sekvenci, například %E0%A4%A. Nástroj dekóduje, co může, poškozené bajty ponechá přesně tak, jak jsou napsány, a oznámí, kolik jich nedokázal dekódovat. Nezastaví se u první chyby.
Okrajové případy
- Mezery v ručně zadaném odkazu. Adresní řádek prohlížeče mezery kóduje za vás, ale odkaz zkopírovaný do dokumentu může stále obsahovat surové mezery. Zakódujte je dřív, než odkaz pošlete dál.
- Názvy domén v jiném písmu. Ty používají jiný systém, punycode, a kódování cesty nebo dotazu název hostitele nemění.
- Půl emoji. Poškozená kopie může zanechat jen polovinu náhradního páru, kterou nelze zakódovat. Nástroj ji nahradí náhradním symbolem a oznámí vám to.
- Base64 v odkazech. Hodnota Base64 v odkazu se řídí vlastními pravidly, místo + a / se používají - a _. Viz Base64 vysvětleno.
Jak to udělat s fixmint
- Vložte text nebo odkaz do pole Text nebo URL.
- Zvolte Zakódovat nebo Dekódovat, pak Komponenta pro jednu hodnotu, nebo Celá URL pro celou adresu.
- Zaškrtněte Použít + pro mezery (data formuláře) u odkazů zkopírovaných z webového formuláře.
- U odkazu si přečtěte Parametry dotazu, dekódované, kde uvidíte každý název a hodnotu.
- Zkopírujte výsledek.
Rychlé odpovědi
Co znamená %20?
Mezeru. Její bajtová hodnota je v hexadecimální soustavě 20.
Proč je v mém odkazu + místo %20?
Odkaz pravděpodobně pochází z formuláře, kde + znamená mezeru. Volba „Použít + pro mezery (data formuláře)“ ho dekóduje.
Proč vidím v odkazu %2520?
Hodnota byla zakódována dvakrát. Znaménko procenta z %20 se zakódovalo znovu jako %25. Dekódováním jednou se vrátíte k %20 a dekódováním podruhé k mezeře.
Přeloženo z Anglický originál s pomocí AI.
Komentáře
Zatím žádné komentáře. Buďte první.


