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.
- a → a (1 znak, bez zmian)
- ł → %C5%82 (6 znaków)
- 😀 → %F0%9F%98%80 (12 znaków)
- "a b" → "a%20b"
- 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.