RevealTheme logo

Koder i dekoder adresów URL

Konwertuj tekst na kodowanie bezpieczne dla adresów URL (kodowanie procentowe) i odwrotnie. Przydatne w przypadku ciągów zapytań, przekierowań i przepływów OAuth.

Jak korzystać z tego narzędzia

  1. 1

    Choose a mode with the Encode or Decode button at the top (Encode is selected by default).

  2. 2

    Type or paste your text into the input box — a raw value to encode, or a percent-encoded string to decode.

  3. 3

    Click Run to convert the text; the result appears in the monospace box below.

  4. 4

    Copy the output from the result box, or switch modes and click Run again to reverse the conversion.

Czym jest kodowanie adresów URL i kiedy go potrzebujesz?

Kodowanie adresów URL (zwane również „kodowaniem procentowym”, określone w RFC 3986) to proces konwertowania znaków, które mają specjalne znaczenie w adresach URL – lub znaków, które wprost nie są bezpieczne w adresach URL – na szesnastkową sekwencję ucieczki „%XX”. Specyfikacja adresów URL rezerwuje pewne znaki o znaczeniu strukturalnym: „?” rozpoczyna ciąg zapytania, „#” rozpoczyna fragment, „&” oddziela parametry zapytania, „/” oddziela segmenty ścieżki itd. Jeśli dane wejściowe użytkownika zawierają któryś z tych znaków, a osadzisz je w adresie URL bez zmian, parser zinterpretuje je błędnie. Kodowanie adresów URL temu zapobiega, zastępując każdy znak zarezerwowany lub niebezpieczny jego szesnastkową reprezentacją bajtów poprzedzoną znakiem „%”. Spacja zamienia się na %20, „&” na %26, „=” na %3D. Znaki spoza ASCII (cyrylica, chiński, emoji) są konwertowane na wielobajtowe sekwencje UTF-8, z każdym bajtem zakodowanym procentowo. Przeglądarki obsługują to automatycznie, gdy klikasz link, ale za każdym razem, gdy budujesz adres URL za pomocą kodu – tworząc zapytanie wyszukiwania, cel przekierowania, wywołanie zwrotne OAuth lub podpis webhooka – musisz najpierw zakodować wartości podane przez użytkownika. To narzędzie używa tych samych funkcji encodeURIComponent / decodeURIComponent, których użyłby Twój kod JavaScript, więc zachowanie dokładnie odpowiada produkcji.

Typowe przypadki użycia

  • Zakoduj wyszukiwane frazy użytkowników przed dołączeniem ich do adresu URL wyszukiwania (?q=user+input).

  • Bezpiecznie przekaż parametr OAuth redirect_uri do serwera autoryzacji.

  • Twórz adresy URL webhooków zawierające zakodowane ładunki JSON w ciągu zapytania.

  • Zakoduj adres URL 'returnTo', aby przetrwał przekazywanie przez inne adresy URL.

  • Zdekoduj zakodowane wartości, które widzisz w pasku adresu przeglądarki po wysłaniu formularza.

  • Przetestuj, jak parsowany jest błędny adres URL – zakoduj znak specjalny i zobacz, co się stanie.

Najczęściej zadawane pytania

Kiedy powinienem kodować adres URL?
Zawsze koduj wartości podane przez użytkownika, zanim umieścisz je w adresie URL: parametry zapytania, segmenty ścieżki lub fragmenty. Brak kodowania to jedno z najczęstszych źródeł subtelnych błędów: wartość „koty & psy” psuje ciąg zapytania, dopóki nie zostanie zakodowana jako „koty%20%26%20psy”.
Jaka jest różnica między encodeURI a encodeURIComponent?
encodeURI jest przeznaczona dla pełnych adresów URL: pozostawia nienaruszone znaki strukturalne, takie jak „/”, „?”, „&”, „=”, ponieważ mają one znaczenie w adresie URL. encodeURIComponent jest przeznaczona dla części adresu URL (wartości zapytania, segmentów ścieżki): koduje wszystko, co nie jest alfanumeryczne. Używaj encodeURIComponent dla poszczególnych wartości zapytania; nigdy nie używaj encodeURI na wartości zapytania podanej przez użytkownika (nie zaszereguje „&” i zepsuje Twój ciąg zapytania).
Czym jest Base64 bezpieczny dla adresów URL w porównaniu z kodowaniem adresów URL?
To odrębne pojęcia. Kodowanie adresów URL (to narzędzie) zastępuje znaki specjalne znak po znaku. Base64 bezpieczny dla adresów URL to wariant Base64, który używa „-” i „_” zamiast „+” i „/”, dzięki czemu wynik jest już bezpieczny dla adresów URL bez dodatkowego kodowania.
Dlaczego „+” czasami jest dekodowany jako spacja?
W application/x-www-form-urlencoded (wysyłki formularzy) „+” jest skrótem oznaczającym spację. Większość dekoderów zachowuje to zachowanie. We współczesnym parsowaniu URI „%20” jest prawidłowym kodowaniem spacji. decodeURIComponent traktuje „+” jako dosłowny „+”; użyj decodeURI lub dekodera formularzy, aby zamienić „+” na spację.
Jak kodowane są znaki spoza ASCII?
Najpierw są konwertowane na bajty UTF-8, a następnie każdy bajt jest kodowany procentowo. Tak więc „café” zamienia się w „caf%C3%A9”: „é” to dwa bajty UTF-8 (0xC3 0xA9). To narzędzie obsługuje UTF-8 poprawnie; niektóre starsze narzędzia kodują przy użyciu Latin-1, co daje inny wynik.
Czy kodowanie adresów URL to to samo, co kodowanie encji HTML?
Nie. Kodowanie adresów URL (%XX) zaszeregowuje znaki dla adresów URL. Kodowanie encji HTML (&, <) zaszeregowuje znaki dla znaczników HTML. Konteksty są różne; kodowanie jednego w kontekście drugiego to częsty błąd prowadzący do XSS.

Powiązane narzędzia