UltKit

Kodowanie i dekodowanie URL

Przygotuj tekst tak, aby można go było bezpiecznie umieścić w adresie URL, albo zamień sekwencje w stylu %20 z powrotem na czytelne znaki. Narzędzie korzysta z wbudowanych w przeglądarkę funkcji encodeURIComponent, encodeURI i decodeURIComponent, wyświetla parametry zapytania w tabeli i niczego nie wysyła na serwer.

Tryb

Znaki: 0 · słowa: 0 · wiersze: 0

Znaki: 0 · słowa: 0 · wiersze: 0

Działa w całości w tej karcie przeglądarki. Twój tekst nie jest wysyłany ani zapisywany.

Co zamienia każda funkcja

Obliczone za pomocą samych funkcji przeglądarki. encodeURIComponent nie zmienia liter, cyfr i tych znaków: ! ' ( ) * - . _ ~

ZnakencodeURIComponentencodeURI
(spacja)%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

Kodowanie procentowe i znaki zarezerwowane w RFC 3986

Adres URL może zawierać tylko ograniczony zestaw znaków ASCII. RFC 3986, specyfikacja składni URI z 2005 roku, dzieli je na dwie grupy. Znaki niezarezerwowane, czyli A–Z, a–z, 0–9 i cztery symbole - . _ ~, nigdy nie wymagają kodowania. Znaki zarezerwowane pełnią określone funkcje: ogólne ograniczniki : / ? # [ ] @ oddzielają schemat, host, ścieżkę, zapytanie i fragment, a podograniczniki ! $ & ' ( ) * + , ; = oddzielają elementy wewnątrz nich, tak jak & i = w ciągu zapytania. Wszystko inne oraz każdy znak zarezerwowany użyty jako zwykłe dane musi zostać zakodowane procentowo.

Kodowanie procentowe zapisuje bajt jako % i dwie cyfry szesnastkowe. Tekst jest najpierw zamieniany na UTF-8, więc spacja staje się %20, znak é (dwa bajty) staje się %C3%A9, a emoji zamienia się w cztery grupy %XX. Dlatego wyszukiwanie „café & bar” trafia do linku jako caf%C3%A9%20%26%20bar: znak & jest zakodowany, żeby serwer nie uznał go za początek nowego parametru.

encodeURIComponent, encodeURI i dekodowanie

encodeURIComponent to właściwy wybór dla pojedynczego fragmentu, takiego jak wartość zapytania, segment ścieżki albo adres przekierowania przekazany jako parametr. Zamienia wszystko poza znakami niezarezerwowanymi oraz ! ' ( ) *, które JavaScript z historycznych powodów pozostawia bez zmian. encodeURI (cały adres URL) zakłada, że dane wejściowe to już kompletny adres, i zachowuje znaki zarezerwowane, więc w https://example.com/a b?q=1 zakodowana zostaje tylko spacja. Użycie encodeURI dla wartości parametru to klasyczny błąd: znak & lub # wewnątrz wartości przetrwa i zepsuje adres URL.

Dekoduj odwraca działanie obu funkcji. Formularze HTML wysyłane metodą GET używają starszego formatu application/x-www-form-urlencoded, w którym spacja jest zapisywana jako + zamiast %20; dla nich zostaw zaznaczoną opcję Traktuj + jako spację, a odznacz ją, gdy liczy się dosłowny plus, na przykład w numerze telefonu. Jeśli w danych jest % niepoprzedzający dwóch cyfr szesnastkowych albo bajty niebędące poprawnym UTF-8, dekodowanie kończy się czytelnym komunikatem zamiast zgadywania. Gdy tekst zawiera ciąg zapytania, jego parametry pojawiają się zdekodowane w tabeli pod narzędziem. Do danych binarnych w adresach URL zwykle używa się alternatywnie Base64url.

Najczęściej zadawane pytania

Czy spację w adresie URL zapisuje się jako %20, czy jako znak plus?
W ścieżkach i według RFC 3986 spacja to %20. Forma + oznacza spację tylko w ciągach zapytania kodowanych tak jak w formularzach HTML, więc %20 jest bezpiecznym wyborem wszędzie.
Skąd w moim adresie URL wzięło się %2520?
Został zakodowany dwukrotnie. Za pierwszym razem spacja zamieniła się w %20, a za drugim zakodowany został sam znak %, który stał się %25. Zdekoduj raz, aby usunąć nadmiarową warstwę, i koduj wartości tylko w jednym miejscu kodu.
Których znaków nigdy nie trzeba kodować procentowo?
Zestaw niezarezerwowany z RFC 3986: litery od A do Z wielkie i małe, cyfry od 0 do 9 oraz łącznik, kropka, podkreślenie i tylda.
Czy adres URL może zawierać polskie litery bez kodowania?
Przeglądarki je wyświetlają, ale w sieci każdy znak spoza ASCII w ścieżce lub zapytaniu jest wysyłany jako zakodowany procentowo UTF-8. Nazwy domen używają osobnego systemu, Punycode, który zamienia je na etykiety xn--.
Dlaczego dekodowanie zgłasza nieprawidłową sekwencję?
W tekście jest znak %, po którym nie ma dwóch cyfr szesnastkowych, na przykład dosłowne „100%”, albo bajty dekodują się do niepoprawnego UTF-8. Zakoduj pojedyncze znaki % jako %25 przed dekodowaniem.