Zakoduj lub zdekoduj dowolny tekst jako URL
Zakoduj procentowo wartość zapytania, segment ścieżki albo cały adres, albo zamień sekwencje %XX z powrotem na czytelny tekst. Obsługuje UTF-8, spacje jako + w stylu formularzy i jedną wartość w wierszu. Nic nie opuszcza Twojej przeglądarki.
Jak zakodować lub zdekodować tekst jako URL
- Wklej tekst, wartość lub adres do pola danych wejściowych.
- Wybierz typ kodowania. Dla pojedynczej wartości zapytania albo segmentu ścieżki zostaw Komponent. Dla całego adresu, w którym trzeba tylko poprawić spacje i litery spoza ASCII, wybierz Pełny URL. Dla danych, które będą odczytane jak wysłany formularz HTML, wybierz Formularz.
- Naciśnij Zakoduj albo Zdekoduj. Przy zaznaczonej opcji Jedna wartość w wierszu każdy wiersz jest przetwarzany osobno, więc możesz przekonwertować całą listę parametrów lub adresów naraz.
- Skopiuj wynik albo naciśnij Użyj wyniku jako danych wejściowych, żeby przetworzyć go ponownie, na przykład by rozpakować wartość zakodowaną dwukrotnie.
Gdy dekodujesz kompletny adres z zapytaniem, narzędzie wypisuje też nazwę i wartość każdego parametru zwykłym tekstem, co jest najszybszym sposobem na przeczytanie długiego adresu śledzącego albo przekierowującego.
Czym jest percent-encoding
Adres URL może zawierać tylko ograniczony zestaw znaków ASCII, a kilka z nich ma swoje zadania: ? rozpoczyna zapytanie, & oddziela parametry, # rozpoczyna fragment, a / oddziela segmenty ścieżki. Percent-encoding to sposób, w jaki wchodzi tam wszystko inne. Każdy znak jest zamieniany na bajty UTF-8, a każdy bajt zapisywany jako % i dwie cyfry szesnastkowe. Spacja to jeden bajt, więc staje się %20; ą to dwa bajty, %C4%85; emoji takie jak 😀 to cztery, %F0%9F%98%80. Dekodowanie odwraca ten proces.
Zasady pochodzą z RFC 3986, sekcja 2 (po angielsku), standardu definiującego składnię URI. Zaleca on wielkie litery w cyfrach szesnastkowych (%3A, nie %3a), mówi, że tekst należy najpierw zamienić na bajty UTF-8, i ostrzega, że implementacje nie mogą kodować ani dekodować tego samego ciągu więcej niż raz.
Znaki zarezerwowane i niezarezerwowane (RFC 3986)
RFC 3986 dzieli znaki dozwolone w adresie URL na dwie grupy:
- Niezarezerwowane: litery
A–Z a–z, cyfry0–9oraz- . _ ~. Nigdy nie wymagają kodowania i znaczą to samo zakodowane lub nie. - Zarezerwowane: ogólne separatory
: / ? # [ ] @i separatory pomocnicze! $ & ' ( ) * + , ; =. Mogą nieść strukturę, więc gdy któryś z nich jest częścią Twoich danych, a nie składni adresu, trzeba go zakodować procentowo.
Wszystko inne, w tym spacje, sam znak %, cudzysłowy, nawiasy ostre i każdy znak spoza ASCII, nie jest dozwolone w adresie w surowej postaci i zawsze wymaga zakodowania. Najczęstsze przypadki:
| Znak | Zakodowany | Dlaczego to ważne |
|---|---|---|
| spacja | %20 (albo + w danych formularza) | W ogóle niedozwolona w adresach URL |
& | %26 | Rozpoczęłaby nowy parametr zapytania |
= | %3D | Oddzieliłaby nazwę parametru od wartości |
? | %3F | Rozpoczęłaby ciąg zapytania |
# | %23 | Odcięłaby wszystko po sobie jako fragment, który nigdy nie trafia na serwer |
/ | %2F | Utworzyłaby dodatkowy segment ścieżki |
+ | %2B | W zapytaniach kodowanych jak formularz jest czytany jako spacja |
% | %25 | Zostałby odczytany jako początek sekwencji ucieczki |
: @ | %3A %40 | Oddzielają schemat, dane logowania i host |
ą | %C4%85 | Spoza ASCII, kodowana jako dwa bajty UTF-8 |
Komponent, pełny URL, RFC 3986 czy formularz: czego użyć
Te same dane kodują się inaczej w zależności od tego, dokąd trafi wynik. Dla danych Tom & Jerry's (2024)/ü:
- Komponent daje
Tom%20%26%20Jerry's%20(2024)%2F%C3%BC. ToencodeURIComponentz JavaScriptu, który koduje wszystko poza literami, cyframi i znakami- _ . ! ~ * ' ( ). Używaj go dla jednej wartości zapytania, jednego segmentu ścieżki albo adresu wstawianego do parametru innego adresu, na przykład celu przekierowania. - Ścisły RFC 3986 daje
Tom%20%26%20Jerry%27s%20%282024%29%2F%C3%BC. Dodatkowo koduje! ' ( ) *, które RFC 3986 rezerwuje jako separatory pomocnicze, mimo żeencodeURIComponentje pomija. Używaj go, gdy ścisły parser albo schemat podpisywania żądań oczekuje dokładnie zbioru z RFC. - Formularz daje
Tom+%26+Jerry%27s+%282024%29%2F%C3%BC. Odpowiada formatowi application/x-www-form-urlencoded ze standardu WHATWG URL (po angielsku): bez zmian zostają tylko litery, cyfry i* - . _, a spacja staje się+. Tak wysyłają dane formularz HTML iURLSearchParams. - Pełny URL daje
Tom%20&%20Jerry's%20(2024)/%C3%BC. ToencodeURI, który zostawia; / ? : @ & = + $ , #, bo zakłada, że w kompletnym adresie już pełnią swoją rolę. Używaj go tylko do uporządkowania całego adresu ze spacjami lub tekstem spoza ASCII. Nigdy nie stosuj go do wartości:&w środku wartości po cichu rozpocząłby nowy parametr.
%20 czy +: spacje w adresach URL
Obok siebie istnieją dwie konwencje. W składni URL z RFC 3986 spacja to zawsze %20, a + jest zwykłym plusem. W formacie kodowania formularzy, którego przeglądarki używają przy wysyłaniu formularza metodą GET, spacja jest zapisywana jako +, a parser WHATWG dla tego formatu zamienia każdy + na spację przed dekodowaniem procentowym. Dlatego ?q=a+b oznacza „a b” dla parsera danych formularza, natomiast /a+b w ścieżce oznacza „a+b”.
Stąd w dekoderze opcja Traktuj + jako spację. Zaznacz ją dla zapytań tworzonych przez formularze, wyszukiwarki i większość narzędzi analitycznych. Zostaw odznaczoną dla ścieżek i dla wartości, w których plus jest prawdziwy, na przykład adresu e-mail name+tag@example.com, który zapisuje się jako name%2Btag%40example.com.
To samo w kodzie
- JavaScript:
encodeURIComponent()idecodeURIComponent()dla wartości,encodeURI()dla całych adresów orazURLSearchParamsdla zapytań w stylu formularza ze spacjami jako+(zob. MDN, po angielsku). - Python:
urllib.parse.quote()domyślnie nie koduje/i zapisuje spacje jako%20, co pasuje do ścieżek;quote_plus()koduje/i zapisuje spacje jako+, co pasuje do wartości formularza (zob. dokumentację Pythona, po angielsku). - PHP:
rawurlencode()stosuje RFC 3986 i zapisuje spacje jako%20;urlencode()zapisuje spacje jako+(zob. podręcznik PHP, po angielsku).
Typowe problemy z kodowaniem URL
Podwójne kodowanie: %2520 zamiast %20
Jeśli adres zawiera %2520, %253A lub podobne ciągi, coś zakodowało ciąg, który był już zakodowany; %25 to zakodowany znak procentu. Zdekoduj go raz i sprawdź wynik. Narzędzie ostrzega, gdy zdekodowany wynik nadal zawiera sekwencje procentowe, a przycisk Użyj wyniku jako danych wejściowych pozwala zdekodować kolejną warstwę. W kodzie rozwiązaniem jest kodowanie każdej wartości dokładnie raz, w chwili budowania adresu.
Błędy „Malformed URI sequence”
Ścisłe dekodery odrzucają znak %, po którym nie następują dwie cyfry szesnastkowe, oraz ciągi bajtów niebędące poprawnym UTF-8. Ten dekoder jest łagodniejszy: dekoduje każdą poprawną sekwencję, zostawia samotny % bez zmian, zastępuje błędne bajty znakiem zastępczym � i informuje o tym, więc możesz znaleźć uszkodzone miejsce, zamiast dostać pusty wynik.
Wartość urywa się na # lub &
Jeśli parametr dociera ucięty, wartość zawierała niezakodowane # albo &, zwykle dlatego, że adres złożono przez sklejanie ciągów albo użyto kodowania Pełny URL. Zakoduj wartość w trybie Komponent.
Zakodowanie całego adresu psuje go
Przepuszczenie kompletnego adresu przez tryb Komponent zamienia https:// w https%3A%2F%2F. To poprawne tylko wtedy, gdy adres sam jest wartością parametru w innym adresie. W przeciwnym razie koduj tylko wstawianą część albo użyj trybu Pełny URL.
Powiązane narzędzia do adresów URL
Zbuduj kompletne linki kampanii w generatorze UTM, usuń parametry śledzące w czyszczeniu linków URL albo zobacz każdy przeskok linku w sprawdzaniu przekierowań. Żeby zamienić skrypt w zakładkę uruchamianą jednym kliknięciem, generator bookmarkletów zakoduje go procentowo za Ciebie. A jeśli podczas pracy zapisujesz strony referencyjne, takie jak RFC, Marqly trzyma je w jednej przeszukiwalnej bibliotece, zob. Marqly dla programistów (po angielsku).
Często zadawane pytania
Co robi kodowanie URL?
Zastępuje znaki niebezpieczne lub mające w adresie URL specjalne znaczenie znakiem procentu i dwiema cyframi szesnastkowymi dla każdego bajtu UTF-8. Spacja zamienia się w %20, & w %26, a ą w %C4%85. Dzięki temu dowolny tekst można przesłać w adresie URL, nie myląc go ze strukturą samego adresu.
Czym różni się encodeURI od encodeURIComponent?
encodeURIComponent koduje wszystko poza literami, cyframi i znakami - _ . ! ~ * ' ( ), więc nadaje się do pojedynczej wartości zapytania albo segmentu ścieżki. encodeURI zostawia dodatkowo ; / ? : @ & = + $ , # bez zmian, bo zakłada, że podajesz kompletny, już uporządkowany adres. Tryb Komponent stosuj do wartości, a tryb Pełny URL wyłącznie do całych adresów.
Spacja to %20 czy +?
Oba zapisy są poprawne, ale w różnych miejscach. %20 działa w całym adresie URL. Znak + oznacza spację tylko w zapytaniach kodowanych jak formularz (application/x-www-form-urlencoded), czyli tak, jak wysyłają je formularze HTML i URLSearchParams. W ścieżce + jest zwykłym plusem. Dekodując zapytanie pochodzące z formularza, zaznacz opcję Traktuj + jako spację.
Dlaczego mój adres zawiera %2520?
Został zakodowany dwa razy. Za pierwszym razem spacja zamieniła się w %20, a za drugim sam znak % został zakodowany jako %25, co dało %2520. Zgodnie z RFC 3986 ten sam ciąg nie powinien być kodowany ani dekodowany więcej niż raz. Zdekoduj go raz i zobacz, czy wróci %20, a potem zdekoduj ponownie.
Czy mogę kodować lub dekodować wiele adresów naraz?
Tak. Wklej po jednej wartości w wierszu i zostaw zaznaczoną opcję Jedna wartość w wierszu. Każdy wiersz jest kodowany albo dekodowany osobno, więc podziały wierszy zostają zachowane i nie zamieniają się w %0A.
Które znaki trzeba kodować?
Wszystko spoza zbioru znaków niezarezerwowanych w RFC 3986 (litery, cyfry, myślnik, kropka, podkreślnik, tylda) trzeba zakodować, gdy jest częścią wartości, a nie struktury adresu. Dotyczy to spacji, liter spoza ASCII (np. ą, ę, ł), znaku % oraz zarezerwowanych separatorów, takich jak ? # & = / : @ i +.
Czy mój tekst jest wysyłany na serwer?
Nie. Kodowanie, dekodowanie i rozbicie zapytania na parametry działają w Twojej przeglądarce dzięki wbudowanym funkcjom JavaScriptu. Nic nie trafia na serwer.





