Zwykły tekst

Zakodowany procentowo

Czym jest koder URL?

Wrzuć ciąg do lewego panelu, a prawy pokaże wersję zakodowaną procentowo. Pod spodem działa encodeURIComponent, które escapuje każdy znak mający w URL-u specjalne znaczenie — spacje stają się %20, ampersandy stają się %26, małpa staje się %40 i tak dalej. Tego kodowania potrzebujesz dla WARTOŚCI parametrów zapytania, segmentów ścieżki i wszędzie tam, gdzie surowy ciąg ma podróżować wewnątrz URL-a, nie psując go.

Są dwa warianty kodowania i różnica ma znaczenie. encodeURIComponent (ta strona) escapuje wszystko, co specjalne, w tym ?, #, &, = i / — bo na poziomie wartości te znaki zmieniłyby znaczenie URL-a. encodeURI jest bardziej liberalne i te znaki strukturalne zostawia w spokoju, bo zakłada, że kodujesz cały, już złożony URL. Jeśli potrzebujesz szczegółów, MDN podaje tabelę znaków zarezerwowanych. Jeśli budujesz cały URL z kawałków, potrzebujesz URL Buildera, nie tej strony.

Sama reguła kodowania pochodzi z RFC 3986 §2.1: każdy niebezpieczny bajt zapisuje się jako % z dwiema cyframi szesnastkowymi jego bajtów UTF-8. Dlatego emoji w stylu rakiety daje cztery procentowe trójki (to cztery bajty UTF-8), a ASCII jak ! zostaje przy jednej. Standard URL od WHATWG formalizuje, jak robią to nowoczesne przeglądarki, a artykuł na Wikipedii o kodowaniu procentowym ma czytelną tabelę referencyjną, jeśli chcesz sprawdzić ręcznie. Wszystko dzieje się w twojej przeglądarce. Nic nie jest wysyłane, nic nie jest logowane.

Jak używać kodera URL

Trzy kroki. Strona aktualizuje się w trakcie pisania — bez przycisku Konwertuj.

1

Wklej swój ciąg lub kliknij Przykład

Wpisz lub wklej dowolny tekst do lewego panelu. Kliknij Przykład, by załadować ciąg z takim zestawem znaków, na jaki naprawdę się trafia — spacje, ampersandy, e-mail, znak procenta. Przykładowe wejście:

Ava Chen & friends? [email protected]  100% off!

Unicode i emoji działają bez problemu — koder używa sekwencji bajtów UTF-8, więc japońskie imię albo emoji zakoduje się do wielobajtowej sekwencji procentowej i wróci czysto przez dowolny zgodny ze standardem dekoder.

2

Odczytaj zakodowany wynik

Prawy panel pokazuje wersję zakodowaną procentowo. Spacje stają się %20, & staje się %26, ? staje się %3F, @ staje się %40, a % samo staje się %25. Aktualizuje się podczas pisania.

3

Skopiuj lub pobierz

Kliknij Kopiuj, by wrzucić zakodowany ciąg do schowka, albo Pobierz, by zapisać go jako plik .txt. Użyj Wyczyść w panelu wejściowym, żeby zacząć od nowa. Żeby pójść w drugą stronę, skocz do Dekodera URL.

Kiedy faktycznie się tego używa

Składanie wartości query stringa ręcznie

Musisz złożyć ?customer=Ava%20Chen&status=active dla szybkiego testu w curl albo deep linka? Zakoduj tu każdą wartość i wklej do swojego URL-a. Zapomnienie o zakodowaniu wartości z & w środku (nazwa klienta typu „Smith & Co.”) to klasyczne źródło tajemniczych bugów „API widzi tylko połowę mojego parametru”.

Kodowanie celu przekierowania

Przepływy OAuth i przekierowania SSO przekazują docelowy URL wewnątrz parametru zapytania (np. ?return_to=...). Ten docelowy URL sam zawiera :, /, ?, & — każdy z nich musi zostać zakodowany procentowo, żeby zewnętrzny URL pozostał poprawnie zbudowany. RFC 6749 §3.1.2 wskazuje to wprost dla URI przekierowań OAuth.

Kodowanie segmentu ścieżki ze slashem w środku

Jeśli twoje REST API ma trasy w stylu /repos/:owner/:name, a w nazwie pojawi się slash (rzadkie, ale w niektórych katalogach legalne), slash trzeba zakodować jako %2F, bo inaczej router potraktuje go jako separator ścieżki. Ta sama logika dotyczy nazw plików ze spacjami albo akcentami w URL-ach do pobrania.

Czyszczenie wejścia od użytkownika, zanim trafi do URL-a

Każdy ciąg wpadający do URL-a z formularza HTML, pola wyszukiwania albo importu CSV musi być zakodowany. Niezakodowane wejście od użytkownika to dokładnie sposób, by skończyć z popsutymi linkami, wektorami wstrzyknięć parametrów albo URL-ami, które działają dla użytkowników ASCII i po cichu zawodzą u wszystkich innych. Notatki OWASP o path traversal dobrze przypominają, ile kosztuje pominięcie tego kroku.

Częste pytania

Powinienem używać encodeURIComponent czy encodeURI?

Prawie zawsze encodeURIComponent — i tego używa ta strona. To właściwy wybór dla wartości parametrów zapytania, segmentów ścieżki i wszędzie tam, gdzie ciąg ma być „kawałkiem” URL-a. encodeURI służy do kodowania URL-a, który strukturalnie jest już kompletny (rzadkość w praktyce — zwykle składasz z części). Linkowana wyżej referencja MDN ma pełną tabelę, które znaki escapuje która z funkcji.

Dlaczego raz dla spacji jest +, a raz %20?

Dwie tradycje kodowania żyją obok siebie. application/x-www-form-urlencoded (treść ?klucz=wartość wysyłki formularza HTML) używa + dla spacji. Ogólne procentowe kodowanie URL z RFC 3986 używa %20. encodeURIComponent zawsze produkuje %20. Większość serwerów akceptuje obie formy, ale jeśli twój dekoder po stronie odbiorczej jest ścisły dla formularzy, po zakodowaniu zamień przez .replace(/%20/g, "+").

Czy obsługuje poprawnie emoji i tekst spoza ASCII?

Tak. Koder najpierw serializuje wejście jako UTF-8, a potem koduje procentowo każdy bajt. Więc emoji staje się wielobajtową sekwencją procentową, a każdy zgodny ze standardem dekoder wraca z nią z powrotem bez strat. Jeśli integrujesz się z systemem, który używa Latin-1 albo innego starego kodowania, masz inny problem — zmień system po drugiej stronie, nie pisz ręcznie kodera nie-UTF-8.

Jakich znaków encodeURIComponent NIE koduje?

Liter A-Z i a-z, cyfr 0-9 oraz znaków niezarezerwowanych - _ . ! ~ * ' ( ). Reszta jest kodowana procentowo. Lista pochodzi prosto z oryginalnej specyfikacji i jest stała w każdym nowoczesnym silniku JavaScript — zerknij do specyfikacji ECMAScript dla encodeURIComponent, jeśli chcesz wersji oficjalnej.

Czy wejście, które tu wkleję, jest gdzieś wysyłane?

Nie. Kodowanie odbywa się w całości w twojej przeglądarce przez silnik JavaScript. Bez wywołania sieciowego, bez serwera, bez logów. Wklejaj sekrety, tokeny, cokolwiek wrażliwego — nie opuszcza twojej maszyny.

Jak duży ciąg mogę tu zakodować?

Wejście ma limit 256 KB. Realne wartości w URL-ach to góra kilka kilobajtów. Jeśli musisz zakodować kilka MB danych, niemal na pewno próbujesz wcisnąć ładunek do URL-a, gdy powinieneś POST-ować body — zakoduj po stronie serwera i pomiń ten cały objazd.

Inne narzędzia URL i kodowania

Kodowanie to jedna operacja. Oto co naturalnie się z nim łączy: