Kodowanie i dekodowanie URL

Zakoduj tekst procentowo dla URL lub odkoduj sekwencje `%HH` z powrotem na znaki. Porównaj tryb komponentu z trybem pełnego URI i zobacz, czemu `%20` i `+` to nie to samo.

Wszystkie obliczenia są wykonywane w przeglądarce. Nic z tego, co wprowadzisz, nie jest wysyłane na serwer.

01 kalkulator

Wyniki aktualizują się podczas wpisywania. Ctrl/Cmd+Enter kopiuje główny wynik.

Wynik

    Pokaż rozwiązanie

      Kodowanie i dekodowanie URL stosuje kodowanie procentowe RFC 3986 do tekstu i odwraca sekwencje %HH z powrotem na znaki. Tryb komponentu koduje znaki zarezerwowane, takie jak /, ? i &, aby mogły bezpiecznie leżeć w jednym parametrze zapytania. Tryb pełnego URI zachowuje strukturalne separatory, więc pełny adres pozostaje użytecznym linkiem. Obsługa spacji obejmuje zarówno %20, jak i znak plus w kodowaniu formularza.

      Całe kodowanie i dekodowanie działa w przeglądarce. Wklejone dane nie trafiają na serwer.

      Kodować tekst do bezpiecznego użycia w URL

      Concept diagram: Wejścia leads to Kodować tekst do bezpiecznego użycia w URL leads to WynikWejściaKodować tekst dobezpiecznego użycia wURLWynik
      Kodować tekst do bezpiecznego użycia w URL.

      Kodowanie procentowe zastępuje niebezpieczne lub zarezerwowane bajty znakiem procentu i dwoma cyframi szesnastkowymi. Cyfry to wartość bajtu, zwykle z UTF-8. Wpisz ciąg, wybierz tryb komponentu lub pełnego URI i skopiuj wynik do ciągu zapytania, segmentu ścieżki lub celu przekierowania.

      Znaki już w zbiorze niezarezerwowanym przechodzą bez zmian. Reszta staje się sekwencjami %HH w trybie komponentu. Kodowanie jest odwracalne, gdy te same reguły stosuje się przy dekodowaniu; mieszanie plusa z kodowania formularza ze ścieżkowym %20 to najczęstsze źródło zepsutych przejść tam i z powrotem.

      Dekodować ciąg z kodowaniem procentowym

      Scale bar: 1 Jednostka wejściowa equals 1.8 Jednostka wyjściowa1 Jednostka wejściowa1.8 Jednostka wyjściowa
      Dekodować ciąg z kodowaniem procentowym.

      Dekodowanie znajduje każdy % z dwoma cyframi hex, zamienia tę parę na bajt i odbudowuje oryginalny tekst w wybranym kodowaniu znaków. Samotny % lub % z cyframi niehex to błąd. Znaki plus można opcjonalnie traktować jako spacje, gdy dane pochodzą z ciał application/x-www-form-urlencoded.

      Zagnieżdżone kodowanie pojawia się, gdy wartość była kodowana dwukrotnie. Jedno dekodowanie może zostawić sekwencje %25 reprezentujące literalny procent. Dekoduj ponownie tylko wtedy, gdy druga warstwa była zamierzona; ślepe podwójne dekodowanie psuje dane zawierające prawdziwy znak %.

      Zrozumieć znaki zarezerwowane i niezarezerwowane

      Concept diagram: Wejścia leads to reserved and unreserved characters leads to WynikWejściareserved and unreservedcharactersWynik
      Zrozumieć znaki zarezerwowane i niezarezerwowane.

      RFC 3986 dzieli ASCII na znaki niezarezerwowane, które nigdy nie wymagają kodowania w URI, oraz znaki zarezerwowane niosące znaczenie strukturalne, np. separatory. Niezarezerwowane litery, cyfry i -_.~ pozostają literalne. Zarezerwowane znaki jak /, ? i & muszą być kodowane procentowo, gdy występują jako dane, a nie składnia ramująca URL.

      Niezarezerwowane: A do Z, a do z, 0 do 9, myślnik -, podkreślenie _, kropka ., tylda ~

      Zarezerwowane (gen-delims): `: / ?

      Zarezerwowane (sub-delims): ! $ & ' ( ) * + , ; =

      Znaki niezarezerwowane pozostają literalne. Znaki zarezerwowane trzeba kodować, gdy występują jako dane, a nie separatory. Znak zapytania w wartości parametru to dane; znak zapytania rozpoczynający ciąg zapytania to struktura. Wybór trybu mówi kalkulatorowi, jaką rolę pełni każdy znak.

      Kodować cały URL a pojedynczy parametr

      Comparison chart of Opcja A versus Opcja B across Case 1, Case 2, Case 3Case 1Case 2Case 3Opcja AOpcja B
      Kodować cały URL a pojedynczy parametr.

      Kodowanie pełnego URI, podobne do JavaScript encodeURI, zostawia znaki strukturalne w spokoju, więc https:// i ukośniki ścieżki przetrwają. Kodowanie komponentu, podobne do encodeURIComponent, koduje te znaki, aby wartość mogła leżeć w parametrze bez psucia otaczającego URL. Zły tryb albo niszczy link, albo zostawia separatory dzielące zapytanie niepoprawnie.

      WejścieStyl pełnego URIStyl komponentu
      https://example.com/a bhttps://example.com/a%20bhttps%3A%2F%2Fexample.com%2Fa%20b
      red&bluered&bluered%26blue
      a=ba=ba%3Db

      Kodowanie całego URL w trybie komponentu niszczy go jako link: dwukropek schematu i ukośniki stają się %3A i %2F. Kodowanie pojedynczego parametru w trybie pełnego URI zostawia & i = nietknięte, co niepoprawnie dzieli zapytanie. Wybierz tryb pasujący do miejsca, które ciąg zajmie.

      Kodować ukośnik i znak zapytania

      Concept diagram: Wejścia leads to Kodować ukośnik i znak zapytania leads to WynikWejściaKodować ukośnik i znakzapytaniaWynik
      Kodować ukośnik i znak zapytania.

      Ciąg testowy / and ? w trybie komponentu staje się %2F%20and%20%3F. Ukośnik i znak zapytania to zarezerwowane separatory traktowane tu jako tekst ładunku, więc każdy jest escapowany. Spacje stają się %20, a litery w and są niezarezerwowane i przechodzą bez zmian od lewej do prawej.

      ZnakPowódZakodowany
      /zarezerwowany separator ścieżki%2F
      spacjanie jest niezarezerwowana%20
      a, n, dniezarezerwowane literybez zmian
      ?zarezerwowany separator zapytania%3F

      Przejdź ciąg od lewej do prawej: zakoduj /, zakoduj spację, przepuść and, zakoduj spację, zakoduj ?. Wynik %2F%20and%20%3F jest bezpieczny w parametrze zapytania o nazwie na przykład q. Tryb pełnego URI na tym samym ciągu zostawi / i ? literalne, co jest poprawne tylko, gdy te znaki mają być strukturą, a nie ładunkiem.

      Zrozumieć %20 a znak plus

      Comparison chart of Opcja A versus Opcja B across Case 1, Case 2, Case 3Case 1Case 2Case 3Opcja AOpcja B
      Zrozumieć %20 a znak plus.

      Spacja koduje się jako %20 w segmentach ścieżki URI i we współczesnych ciągach zapytania zgodnych z RFC 3986. Formularze HTML wysyłane jako application/x-www-form-urlencoded historycznie kodowały spacje jako +. Oba konwencje występują w ruchu produkcyjnym, a traktowanie ich jako identycznych to najczęstszy błąd kodowania spacji przy dekodowaniu mieszanych wejść.

      KontekstKodowanie spacji
      Segment ścieżki%20
      Zapytanie RFC 3986%20
      Ciało formularza / legacy query+

      Literalny znak plus w danych musi być zakodowany jako %2B, inaczej dekoder formularza potraktuje go jako spację. Kalkulator oznacza, która konwencja spacji jest aktywna, aby odkodowany + nie został pomylony ze znakiem plus przy trybie formularza, a %20 nie został odrzucony przy trybie ścieżki.

      Rozłożyć URL na części

      Concept diagram: Wejścia leads to Rozłożyć URL na części leads to WynikWejściaRozłożyć URL na częściWynik
      Rozłożyć URL na części.

      Typowy URL ma schemat, host, opcjonalny port, ścieżkę, ciąg zapytania i fragment, a reguły kodowania różnią się według części. Strukturalne separatory jak ://, /, ?, &, = i # pozostają literalne, gdy ramują adres.

      Nazwy parametrów, wartości parametrów i segmenty ścieżki niosące dane koduje się indywidualnie w trybie komponentu, zanim separatory je połączą.

      https://example.com:443/search?q=a%20b&lang=en#top
      └─┬─┘   └─────┬─────┘ └─┬──┘ └───────┬───────┘ └┬┘
      scheme       host     path        query      fragment
      CzęśćRola
      SchematProtokół, np. https
      HostDomena lub IP, z opcjonalnym portem
      ŚcieżkaLokalizacja zasobu, rozdzielana ukośnikami
      ZapytanieLista parametrów po ?, łączona przez &
      FragmentLokalizacja po stronie klienta po #, nie wysyłana do serwera tak samo jak URI żądania

      Koduj nazwy i wartości parametrów indywidualnie w trybie komponentu, potem łącz literalnymi & i =. Koduj segmenty ścieżki indywidualnie, jeśli zawierają spacje lub znaki zarezerwowane, zachowując ukośniki rozdzielające segmenty jako literalne.

      Czytać tabelę kodowania znaków

      Concept diagram: Wejścia leads to character encoding table leads to WynikWejściacharacter encodingtableWynik
      Czytać tabelę kodowania znaków.

      Poniższa tabela listuje typowe znaki zarezerwowane i niebezpieczne z ich formami procentowymi przy kodowaniu bajtów UTF-8. Spacja staje się %20, ampersand %26, hash %23. Znaki spoza ASCII rozwijają się na wiele jednostek %HH, bo każdy bajt UTF-8 koduje się osobno, a nie jako jeden abstrakcyjny glif.

      ZnakProcentUwagi
      spacja%20Lub + w kodowaniu formularza
      !%21
      #%23Separator fragmentu
      $%24
      &%26Separator par zapytania
      '%27
      (%28
      )%29
      +%2BLiteralny plus
      ,%2C
      /%2FSeparator ścieżki
      :%3ASeparator schematu / hosta
      ;%3B
      =%3DPrzypisanie parametru
      ?%3FPoczątek zapytania
      @%40Separator userinfo
      [%5B
      ]%5D

      Tekst spoza ASCII najpierw wyraża się jako bajty UTF-8, potem każdy bajt koduje się procentowo. Jeden widoczny znak może więc rozszerzyć się na dwie lub trzy jednostki %HH. Głębokie omówienia kodowania znaków dla Shift JIS i podobnych zestawów legacy są przy narzędziu Base64; ta strona linkuje zamiast powtarzać katalog.

      Często zadawane pytania

      Czym jest kodowanie procentowe?

      Kodowanie procentowe zastępuje bajt znakiem % i dwoma cyframi szesnastkowymi jego wartości. Pozwala zarezerowanym i znakom spoza ASCII podróżować w URL bez odczytywania jako składnia. Dekodowanie odwraca podstawienie.

      Kiedy używać kodowania komponentu?

      Używaj kodowania komponentu dla pojedynczej nazwy lub wartości parametru, segmentu ścieżki będącego czystymi danymi lub dowolnego ciągu wstawianego obok strukturalnych separatorów. Koduje /, ?, & i =, aby nie mogły podzielić URL.

      Kiedy używać kodowania pełnego URI?

      Używaj kodowania pełnego URI, gdy wejście to już pełny URL i powinny zmienić się tylko nielegalne znaki, np. spacje. Strukturalne dwukropki i ukośniki pozostają literalne, więc wynik nadal jest klikalnym adresem.

      Dlaczego / and ? staje się %2F%20and%20%3F?

      W trybie komponentu ukośnik i znak zapytania traktuje się jako dane, więc kodują się do %2F i %3F. Spacje stają się %20. Litery w and są niezarezerwowane i pozostają bez zmian.

      Czy + to to samo co %20?

      Nie. %20 to kodowanie spacji w RFC 3986. + oznacza spację tylko w danych application/x-www-form-urlencoded. Literalny plus musi być %2B, inaczej dekodery formularzy zamienią go na spację.

      Które znaki nigdy nie wymagają kodowania?

      Zbiór niezarezerwowany: litery, cyfry, myślnik, podkreślenie, kropka i tylda. Te znaki pozostają literalne w obu trybach. Kodowanie ich nadal działa, ale dodaje zbędną długość.

      Jak kodowane są znaki spoza ASCII?

      Najpierw zamienia się je na bajty UTF-8, potem każdy bajt koduje procentowo. Jeden widoczny znak może stać się wieloma sekwencjami %HH. Dekodowanie musi używać UTF-8, aby odbudować oryginalny tekst.

      Czy podwójne dekodowanie naprawia zepsuty URL?

      Tylko gdy wartość była celowo kodowana dwukrotnie. W przeciwnym razie drugi przebieg psuje literalne sekwencje %, które były częścią danych. Dekoduj raz, sprawdź i dekoduj ponownie tylko, gdy wzorce %25 pokazują drugą warstwę.

      Czy to to samo co Base64?

      Nie. Kodowanie procentowe escapuje znaki dla URI. Base64 mapuje dowolne bajty na alfabet 64 znaków do transportu w protokołach tekstowych. Używaj każdego do swojej roli.

      Czy wklejone URL są wysyłane?

      Nie. Kodowanie i dekodowanie działa tylko w przeglądarce. Ciągi zapytania z tokenami lub fragmentami sesji nie są przesyłane na serwer przez to narzędzie.

      Podsumowanie

      Kodowanie i dekodowanie URL koduje i dekoduje tekst procentowo według reguł RFC 3986, z osobnymi trybami dla pełnych URI i pojedynczych komponentów. Ciąg testowy / and ? staje się %2F%20and%20%3F w trybie komponentu. Spacje używają %20 w kontekstach URI i mogą używać + w kodowaniu formularza, co jest inną konwencją.

      Znaki zarezerwowane zachowują znaczenie tylko, gdy pozostają literalne jako struktura; koduj je, gdy są ładunkiem. Cała praca zostaje na urządzeniu.