Kodowanie URL (zwane również kodowaniem procentowym) to mechanizm kodowania informacji w Jednolitym Identyfikatorze Zasobów (URI) tak, aby w końcowym ciągu pojawiały się tylko znaki dozwolone przez RFC 3986. Każdy znak niebędący znakiem niezarezerwowanym (A–Z, a–z, 0–9, -, _, ., ~) jest zastępowany znakiem procentu, po którym następują dwie cyfry szesnastkowe reprezentujące wartość bajtu UTF-8 znaku — na przykład spacja staje się %20, a & staje się %26.
Kodowanie procentowe jest konieczne, ponieważ adresy URL mogą zawierać tylko ograniczony zestaw znaków ASCII. Gdy adres URL zawiera znaki spoza tego zestawu — spacje, litery Unicode, symbole takie jak &, = czy / używane jako wartości dosłowne zamiast ograniczników strukturalnych — te znaki muszą być zakodowane, aby zapobiec błędnej interpretacji przez parser URL. Jest to szczególnie ważne dla wartości ciągów zapytań, gdzie niezakodowane & lub = zniszczyłyby strukturę parametrów.
Dlaczego warto używać tego narzędzia?
Natychmiast sprawdź, jak twój tekst koduje się w obu trybach, z porównaniem na żywo obok siebie — bez konieczności pisania kodu do sprawdzania przypadków brzegowych.
⚡
Podgląd na żywo
Wynik aktualizuje się podczas pisania. Wypróbuj różne dane wejściowe i natychmiast sprawdź, które znaki są kodowane, a które zachowywane.
🔀
Dwa tryby
Przełączaj się między encodeURIComponent (dla wartości) i encodeURI (dla pełnych adresów URL) bez opuszczania strony.
🔒
Tylko po stronie klienta
Całe kodowanie działa lokalnie w twojej przeglądarce. Wrażliwe parametry zapytania i tokeny nigdy nie trafiają na serwer.
📋
Kopiowanie jednym kliknięciem
Skopiuj zakodowany wynik do schowka jednym przyciskiem. Gotowy do wklejenia bezpośrednio do kodu, terminala lub paska adresu przeglądarki.
Jak korzystać z tego kodera URL online
Bez konta, bez instalacji. Wklej lub wpisz tekst w pole wejściowe, a wynik zakodowany procentowo pojawi się natychmiast. Wszystko działa w Twojej przeglądarce — dane nigdy nie opuszczają Twojego urządzenia.
1
Wklej tekst lub adres URL
Wpisz dowolny ciąg — wartość parametru zapytania, pełny adres URL, segment ścieżki lub dane JSON. Koder przetwarza go znak po znaku zgodnie z RFC 3986.
2
Wybierz tryb kodowania
Wybierz encodeURIComponent, aby kodować poszczególne wartości parametrów (koduje wszystko poza znakami niezastrzeżonymi). Wybierz encodeURI, aby zakodować pełny adres URL, zachowując znaki strukturalne, takie jak ://?#&=.
3
Skopiuj zakodowane wyjście
Ciąg zakodowany procentowo pojawia się natychmiast. Kliknij Kopiuj, aby pobrać wynik i wkleić go bezpośrednio do wywołania API, akcji formularza lub pliku konfiguracyjnego.
4
W razie potrzeby zdekoduj
Pomyłka lub chcesz zweryfikować wynik? Przejdź do narzędzia Dekoder URL jednym kliknięciem, aby odwrócić kodowanie.
Które znaki są kodowane?
RFC 3986 dzieli znaki URL na dwie kategorie: znaki niezarezerwowane (nigdy nie kodowane) i znaki zarezerwowane (mają specjalne znaczenie — kodowane lub zachowywane w zależności od kontekstu). Poniższa tabela pokazuje, jak dwie funkcje JavaScript traktują kluczowe znaki:
Znak
Znaczenie w URL
encodeURIComponent
encodeURI
Space
word separator
%20
%20
+
plus sign
%2B
%2B
/
path separator
%2F
/ (kept)
?
query start
%3F
? (kept)
#
fragment
%23
# (kept)
&
param separator
%26
& (kept)
=
param value
%3D
= (kept)
@
auth separator
%40
@ (kept)
:
scheme / port
%3A
: (kept)
%
percent literal
%25
%25
~
unreserved
~ (kept)
~ (kept)
-_.~
unreserved set
kept as-is
kept as-is
encodeURIComponent vs encodeURI
JavaScript udostępnia dwie funkcje kodowania o bardzo różnym zachowaniu. Wybranie złej jest jednym z najczęstszych błędów w obsłudze URL:
encodeURIComponent()
Koduje wszystko oprócz zestawu znaków niezarezerwowanych (A–Z a–z 0–9 - _ . ~). To właściwy wybór do kodowania pojedynczych wartości parametrów zapytania, segmentów ścieżki lub dowolnej wartości, która będzie osadzona wewnątrz adresu URL. Koduje /, ?, # i & oraz wszystkie inne znaki zarezerwowane.
encodeURI()
Zachowuje całą strukturę URL, pozostawiając znaki zarezerwowane (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) niezakodowane. Używaj tylko wtedy, gdy masz kompletny URL z strukturą, którą chcesz zachować, i musisz zakodować tylko znaki inne niż ASCII lub niedozwolone w nim.
Typowe przypadki użycia
Parametry ciągu zapytania
Koduj wartości parametrów przed dołączeniem ich do URL: name=John%20Doe zamiast name=John Doe. Niezakodowane spacje i znaki specjalne psują parsery URL i generują nieoczekiwane wyniki.
Budowanie żądań API
REST API wymagają prawidłowo zakodowanych parametrów zapytania. Kodowanie wartości za pomocą encodeURIComponent zapobiega wstrzykiwaniu dodatkowych parametrów przez znaki takie jak & i = osadzone w wartościach.
Przesyłanie danych formularza
Formularze HTML domyślnie przesyłają dane jako application/x-www-form-urlencoded. Zrozumienie kodowania procentowego pomaga debugować to, co przeglądarka wysyła, a co serwer otrzymuje.
Segmenty ścieżki ze znakami specjalnymi
Nazwy plików lub identyfikatory zawierające spacje, ukośniki lub znaki unicode muszą być kodowane procentowo, gdy są używane jako segmenty ścieżki URL: /files/my%20document.pdf.
OAuth i tokeny uwierzytelniania
OAuth 1.0a i niektóre protokoły uwierzytelniania wymagają, aby ciąg bazowy był zbudowany z procentowo zakodowanych nazw i wartości parametrów zgodnie ze ścisłym algorytmem normalizacji.
Głębokie linki i URL-e do udostępniania
Podczas generowania adresów URL do udostępniania, które zawierają treść użytkownika (zapytania wyszukiwania, stan filtrów, współrzędne), koduj wszystkie dynamiczne wartości, aby zapobiec uszkodzonym linkom i XSS przez manipulację URL.
Przykłady kodu
Jak kodować ciągi URL w popularnych językach i środowiskach:
JavaScript (browser / Node.js)
// Encode a query parameter value (most common case)
encodeURIComponent('hello world & more') // → "hello%20world%20%26%20more"
// Encode a complete URL (preserves ://?#& structure)
encodeURI('https://example.com/path?q=hello world') // → "https://example.com/path?q=hello%20world"
// Build a query string safely
const params = new URLSearchParams({ q: 'hello world', lang: 'en' })
const url = `https://example.com/search?${params}` // uses + for spaces
Python
from urllib.parse import quote, urlencode, quote_plus
# Encode a path segment or query value
quote('hello world & more') # → 'hello%20world%20%26%20more'
# Encode for application/x-www-form-urlencoded (space → +)
quote_plus('hello world') # → 'hello+world'
# Build a query string
urlencode({'q': 'hello world', 'lang': 'en'}) # → 'q=hello+world&lang=en'
Node.js (URL API)
const url = new URL('https://example.com/search')
url.searchParams.set('q', 'hello world & more')
url.searchParams.set('lang', 'en')
console.log(url.toString())
// → https://example.com/search?q=hello+world+%26+more&lang=en
Kilka narzędzi może kodować tekst procentowo, ale różnią się pod względem kontroli, prywatności i kontekstu.
To narzędzie
Działające w przeglądarce, natychmiastowe, prywatne. Obsługuje tryby encodeURIComponent i encodeURI. Żadne dane nie są wysyłane na żaden serwer. Obsługuje pełne dane wejściowe Unicode.
Pasek adresu przeglądarki
Przeglądarki automatycznie kodują adresy URL po wklejeniu, ale tylko częściowo — zachowują wiele znaków specjalnych dla czytelności. Nie nadaje się do kodowania wartości parametrów.
URLSearchParams / urllib
Właściwe podejście programistyczne do budowania adresów URL w JavaScript lub Pythonie. Użyj tego narzędzia do szybkiego jednorazowego kodowania lub sprawdzenia, co wygeneruje Twój kod.
Często zadawane pytania
Jaka jest różnica między %20 a + dla spacji?
Oba reprezentują spację, ale w różnych kontekstach. %20 to standardowa procentowo zakodowana reprezentacja spacji i jest ważna wszędzie w adresie URL. Znak + reprezentuje spację tylko w formacie application/x-www-form-urlencoded (przesyłanie formularzy HTML). W ścieżce URL lub surowej wartości zapytania + jest dosłownym znakiem plus, a nie spacją. Używaj %20 dla maksymalnej kompatybilności.
Kiedy używać encodeURIComponent vs encodeURI?
Użyj encodeURIComponent dla pojedynczych wartości (parametry zapytania, segmenty ścieżki, fragmenty hash). Użyj encodeURI tylko wtedy, gdy masz kompletny URL i chcesz zachować jego strukturę. Powszechnym błędem jest użycie encodeURI na wartości zapytania — pozostawi & i = niezakodowane, psując ciąg zapytania.
Czy kodowanie URL obsługuje znaki Unicode?
Tak. Znaki inne niż ASCII są najpierw konwertowane na reprezentację bajtów UTF-8, a następnie każdy bajt jest procentowo kodowany. Na przykład znak euro (U+20AC) koduje się jako %E2%82%AC — jego trzy bajty UTF-8. Zarówno encodeURIComponent, jak i encodeURI obsługują to poprawnie we wszystkich nowoczesnych przeglądarkach.
Czy podwójne kodowanie jest problemem?
Tak. Jeśli zakodować już zakodowany ciąg, %20 staje się %2520 (sam % jest kodowany jako %25). Zawsze koduj surowe wartości, a nie już zakodowane. W razie wątpliwości najpierw zdekoduj, a następnie ponownie zakoduj.
Które znaki są zawsze bezpieczne w URL-ach?
Znaki niezarezerwowane zdefiniowane przez RFC 3986 są zawsze bezpieczne i nigdy nie wymagają kodowania: duże A–Z, małe a–z, cyfry 0–9, myślnik (-), podkreślenie (_), kropka (.) i tylda (~). Wszystko inne powinno być procentowo zakodowane, gdy jest używane jako wartość, a nie jako ogranicznik strukturalny.
Dlaczego niektóre URL-e zawierają hex wielkie (%2F), a inne małe (%2f)?
Oba są prawidłowe. RFC 3986 określa, że sekwencje procentowo zakodowane są niewrażliwe na wielkość liter, więc %2F i %2f są równoważne. Jednak ten sam RFC zaleca używanie wielkich cyfr szesnastkowych dla spójności. Większość przeglądarek i bibliotek generuje wielkie litery.
Czy to narzędzie koduje cały adres URL, czy tylko parametry?
Obydwa. Użyj trybu encodeURIComponent, aby kodować poszczególne wartości parametrów zapytania (najczęstszy przypadek użycia). Użyj trybu encodeURI, aby zakodować pełny adres URL, zachowując znaki strukturalne, takie jak ://, ?, # i &.
Czy istnieje ograniczenie długości dla kodowania?
Brak limitu po stronie serwera — narzędzie działa w całości w Twojej przeglądarce. Praktyczne ograniczenia zależą od pamięci przeglądarki. W przypadku bardzo dużych danych wejściowych lub przetwarzania wsadowego użyj encodeURIComponent w skrypcie.