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

  1. Wklej tekst, wartość lub adres do pola danych wejściowych.
  2. 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.
  3. 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.
  4. 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, cyfry 0–9 oraz - . _ ~. 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:

ZnakZakodowanyDlaczego to ważne
spacja%20 (albo + w danych formularza)W ogóle niedozwolona w adresach URL
&%26Rozpoczęłaby nowy parametr zapytania
=%3DOddzieliłaby nazwę parametru od wartości
?%3FRozpoczęłaby ciąg zapytania
#%23Odcięłaby wszystko po sobie jako fragment, który nigdy nie trafia na serwer
/%2FUtworzyłaby dodatkowy segment ścieżki
+%2BW zapytaniach kodowanych jak formularz jest czytany jako spacja
%%25Zostałby odczytany jako początek sekwencji ucieczki
: @%3A %40Oddzielają schemat, dane logowania i host
ą%C4%85Spoza 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. To encodeURIComponent z 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 że encodeURIComponent je 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 i URLSearchParams.
  • Pełny URL daje Tom%20&%20Jerry's%20(2024)/%C3%BC. To encodeURI, 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() i decodeURIComponent() dla wartości, encodeURI() dla całych adresów oraz URLSearchParams dla 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.

← Darmowe narzędzia

Strona główna · Marqly