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