URL kódovanie a dekódovanie
Upravte text tak, aby ho bolo možné bezpečne vložiť do URL, alebo premeňte sekvencie typu %20 späť na čitateľné znaky. Nástroj používa vlastné funkcie vášho prehliadača encodeURIComponent, encodeURI a decodeURIComponent, zobrazí parametre dopytu v tabuľke a nič neodosiela na server.
0 znakov · 0 slov · 0 riadkov
0 znakov · 0 slov · 0 riadkov
Všetko prebieha priamo v tejto karte prehliadača. Váš text sa nikdy nenahráva ani neukladá.
Čo každá funkcia escapuje
Vypočítané samotnými funkciami prehliadača. encodeURIComponent nechá nedotknuté písmená, číslice a tieto znaky: ! ' ( ) * - . _ ~
| Znak | encodeURIComponent | encodeURI |
|---|---|---|
(medzera) | %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 |
Percentové kódovanie a rezervované znaky podľa RFC 3986
URL môže obsahovať iba obmedzenú sadu znakov ASCII. RFC 3986, špecifikácia syntaxe URI z roku 2005, ich delí na dve skupiny. Nerezervované znaky, A–Z, a–z, 0–9 a štyri znaky - . _ ~, sa nikdy nemusia kódovať. Rezervované znaky majú svoju úlohu: všeobecné oddeľovače : / ? # [ ] @ oddeľujú schému, hostiteľa, cestu, dopyt a fragment a pododdeľovače ! $ & ' ( ) * + , ; = oddeľujú položky v nich, ako to robia & a = v reťazci dopytu. Všetko ostatné, aj rezervovaný znak použitý ako bežné dáta, sa musí kódovať percentami.
Percentové kódovanie zapíše bajt ako % a dve hexadecimálne číslice. Text sa najprv prevedie do UTF-8, takže medzera sa zmení na %20, znak é (dva bajty) na %C3%A9 a emoji na štyri skupiny %XX. Preto sa vyhľadávanie „café & bar“ v odkaze zobrazí ako caf%C3%A9%20%26%20bar: znak & sa zakóduje, aby ho server nepovažoval za začiatok nového parametra.
encodeURIComponent, encodeURI a dekódovanie
encodeURIComponent je správna voľba pre jednu časť, napríklad hodnotu dopytu, segment cesty alebo URL presmerovania odovzdanú ako parameter. Kóduje všetko okrem nerezervovaných znakov a ! ' ( ) *, ktoré JavaScript z historických dôvodov ponecháva. encodeURI (celá URL) predpokladá, že vstup je už úplná adresa, a rezervované znaky ponecháva, takže v https://example.com/a b?q=1 sa zakóduje iba medzera. Použiť encodeURI na hodnotu parametra je klasická chyba: znak & alebo # v hodnote by zostal a pokazil by URL.
Dekódovať vráti späť obe funkcie. Formuláre HTML odoslané metódou GET používajú starší formát application/x-www-form-urlencoded, v ktorom sa medzera zapisuje ako + namiesto %20; pre ne nechajte zaškrtnuté Považovať + za medzeru a odškrtnite ho, keď záleží na doslovnom znaku plus, napríklad v telefónnom čísle. Ak vstup obsahuje % bez dvoch hexadecimálnych číslic alebo bajty, ktoré nie sú platné UTF-8, dekódovanie zlyhá s jasnou správou namiesto hádania. Ak text obsahuje reťazec dopytu, jeho parametre sa zobrazia dekódované v tabuľke pod nástrojom. Pre binárne dáta v URL je bežnou alternatívou Base64url.
Často kladené otázky
- Má byť medzera v URL zapísaná ako %20 alebo ako znak plus?
- V cestách a podľa RFC 3986 je medzera %20. Tvar + znamená medzeru iba v reťazcoch dopytu kódovaných tak, ako ich kódujú formuláre HTML, takže %20 je bezpečná voľba všade.
- Prečo sa v mojej URL objavilo %2520?
- Bolo to zakódované dvakrát. Prvý prechod zmenil medzeru na %20 a druhý zakódoval samotné % ako %25. Dekódujte raz, aby ste odstránili nadbytočnú vrstvu, a hodnoty kódujte iba na jednom mieste v kóde.
- Ktoré znaky nikdy nepotrebujú percentové kódovanie?
- Nerezervovaná sada podľa RFC 3986: písmená A až Z malé aj veľké, číslice 0 až 9 a spojovník, bodka, podčiarkovník a tilda.
- Môže URL obsahovať písmená s diakritikou bez kódovania?
- Prehliadače ich zobrazujú, ale po sieti sa každý znak mimo ASCII v ceste alebo dopyte posiela ako percentovo kódované UTF-8. Doménové mená používajú samostatný systém, Punycode, ktorý ich mení na štítky xn--.
- Prečo dekódovanie hlási chybnú sekvenciu?
- Text obsahuje % bez dvoch hexadecimálnych číslic, napríklad doslovné „100%“, alebo bajty tvoria neplatné UTF-8. Osamotené znaky % pred dekódovaním zakódujte ako %25.