UltKit

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.

Režim

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

ZnakencodeURIComponentencodeURI
(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.