Skip to main content

Koduj lub dekoduj ciągi URL.

Wszystkie obliczenia wykonywane są lokalnie w przeglądarce. Dane nie są wysyłane na serwer.

Wyniki mają charakter informacyjny. Potwierdź je w innych źródłach.

Jedno polskie zdanie z 17 znaków staje się 66 znakami w adresie URL

Kodowanie procentowe działa na bajtach, a nie na znakach, a UTF-8 wydaje więcej niż jeden bajt na wszystko poza ASCII. Każdy bajt staje się trzema znakami, więc tekst z diakrytykami rozdyma się gwałtownie: zażółć gęślą jaźń to 17 znaków, 26 bajtów i 66 znaków po zakodowaniu — współczynnik 3,88.

Jak to działa

  • Koduje procentowo tekst do bezpiecznego użycia w adresach URL i odkodowuje go z powrotem.
  • Najpierw koduje do UTF-8 i to stamtąd bierze się przyrost rozmiaru.
  • Odróżnia kodowanie całego adresu od kodowania pojedynczego składnika — to różne zadania o różnych zbiorach znaków bezpiecznych.
każdy niebezpieczny bajt → % i dwie cyfry szesnastkowe

liczba bajtów w UTF-8:
  ASCII        1 bajt  → 1 znak bez kodowania
  ł, ü         2 bajty → 6 znaków   (%C5%82)
  €, 日        3 bajty → 9 znaków   (%E2%82%AC)
  emoji        4 bajty → 12 znaków  (%F0%9F%98%80)

71 z 95 drukowalnych znaków ASCII przechodzi nietkniętych

Przykład z liczbami

Te same znaki po zakodowaniu, a potem klasyczna awaria podwójnego kodowania.

  1. a → a (1 znak, bez zmian)
  2. ł → %C5%82 (6 znaków)
  3. 😀 → %F0%9F%98%80 (12 znaków)
  4. "a b" → "a%20b"
  5. zakodowanie tego jeszcze raz → "a%2520b"

Drugie kodowanie zamienia znak % z %20 na %25, dając %2520. Jednokrotne odkodowanie zwraca a%20b, a nie a b — ciąg wygląda na odkodowany, a wciąż jest błędny, i właśnie dlatego błędy podwójnego kodowania żyją tak długo, zanim ktokolwiek je zauważy.

Jak czytać wynik

  • Spacja to %20 w ścieżce i + w danych zapytania kodowanych formularzowo, a te dwa zapisy nie są wymienne. Odkodowanie + jako dosłownego plusa tam, gdzie chodziło o spację, albo odwrotnie, to drugi najczęstszy błąd kodowania zaraz po podwójnym kodowaniu.
  • Koduj składniki, a nie całe adresy. Przepuszczenie pełnego adresu przez kodowanie składnika niszczy :// i separatory; przepuszczenie składnika przez kodowanie pełnego adresu zostawia & oraz = nietknięte, co pozwala danym użytkownika wstrzyknąć dodatkowe parametry.
  • Do przyrostu rozmiaru doczepione są praktyczne ograniczenia. Serwery i pośredniki zwykle ucinają adresy w okolicach 2000 znaków, więc ciąg zapytania niosący tekst z diakrytykami uderza w ten sufit kilka razy szybciej, niż sugeruje liczba znaków.
  • Kodowanie to nie escapowanie dla innych kontekstów. Ciąg zakodowany procentowo jest bezpieczny w adresie URL i nie mówi nic o bezpieczeństwie w HTML, SQL czy powłoce — każdy cel wymaga własnego kodowania, zastosowanego w miejscu użycia.

Częste pytania

Dlaczego mój tekst zamienił się w %2520?
Bo został zakodowany dwa razy. Pierwsze przejście zamieniło spację na %20; drugie zobaczyło % jako zwykły znak i zakodowało go jako %25, zostawiając %2520. Odkoduj dwukrotnie, żeby odzyskać oryginał, a potem napraw tę warstwę, która koduje nadmiarowo.
Spacja to %20 czy +?
%20 wszędzie poza ciągami zapytania kodowanymi formularzowo, gdzie + jest konwencją historyczną i wciąż powszechnie wytwarzaną. W tym kontekście oba odkodowują się do spacji, ale tylko %20 jest poprawne w segmencie ścieżki.