logo
GeekFormat

Kodowanie URL

Kod kodowy
Wejście URL
0 chars

Darmowe narzędzie online do kodowania/dekodowania URL. Obsługuje 4 tryby encodeURIComponent/encodeURI/RFC 3986, podświetlanie zakodowanych znaków w czasie rzeczywistym, wieloliniowy tryb wsadowy, Query Only dla kodowania tylko wartości parametrów. Lokalne przetwarzanie w przeglądarce, zerowe przesyłanie danych.

Powiązane Rekomendacje

Przypadki użycia

  • Debugowanie parametrów API: porównywanie wyników encodeURIComponent i encodeURI w celu rozwiązania problemów z niezgodnością podpisów interfejsu
  • Dekodowanie logów: wsadowe dekodowanie zakodowanej zawartości URL w logach w celu przywrócenia czytelnego tekstu
  • Budowanie URL: tryb Query Only zachowuje nazwy kluczy i koduje tylko wartości, unikając błędów formatu przy ręcznej konkatenacji
  • Rozwój frontendowy: podświetlanie pomaga zrozumieć, które znaki są escapowane, przydatne do debugowania przekierowań stron
  • Migracja danych: wsadowe przetwarzanie zakodowanych danych URL eksportowanych ze starszych systemów w celu konwersji na nowy format

Funkcje

  • Cztery tryby kodowania: przełączanie między encodeURIComponent / encodeURI / full / RFC 3986 jednym kliknięciem, porównywanie różnic wyników w czasie rzeczywistym
  • Podświetlanie kodowania: podświetla escapowane znaki %XX w czasie rzeczywistym, bursztynowe oznaczenie sprawia, że wyniki kodowania są widoczne od razu
  • Tryb wsadowy: obsługa wieloliniowego wsadowego kodowania/dekodowania, każda linia przetwarzana niezależnie, idealne dla logów lub danych masowych
  • Tryb Query Only: koduje tylko część wartości parametrów URL (po znaku równości), pozostawiając nazwy kluczy, znaki i strukturę ścieżki nietkniętymi
  • Debounce w czasie rzeczywistym: automatyczne kodowanie/dekodowanie w ciągu 300 ms, nie trzeba klikać przycisków, wyniki pojawiają się podczas pisania
  • Licznik znaków: wyświetla liczbę wprowadzonych znaków w czasie rzeczywistym, przydatne do sprawdzania ograniczeń długości parametrów API

Jak Używać

  1. Wprowadź lub wklej URL lub tekst do zakodowania/odkodowania
  2. Wybierz kierunek kodowania (Koduj/Dekoduj) i tryb (Component / URI / full / RFC 3986)
  3. Włącz tryb wsadowy dla danych wieloliniowych lub Query Only dla kodowania tylko wartości parametrów
  4. Sprawdź podświetlony wynik i skopiuj zakodowany ciąg do użycia w wywołaniach API lub budowaniu URL

Często Zadawane Pytania

Jaka jest różnica między encodeURIComponent a encodeURI?

encodeURIComponent koduje wszystkie niebezpieczne znaki, w tym &, =, ?, itp., więc nadaje się do kodowania pojedynczych wartości parametrów. encodeURI zachowuje znaki strukturalne URL (:, /, ?, #, itp.), więc nadaje się do kodowania pełnych URL. Scenariusz użycia: Component dla wartości parametrów, URI dla pełnych URL.

Jaka jest różnica między RFC 3986 a standardowym kodowaniem?

RFC 3986 to zaktualizowana wersja standardu URL, która traktuje tyldę ~ jako bezpieczny znak niewymagający kodowania, podczas gdy starsze standardy kodują ją jako %7E. Użycie RFC 3986 może uniknąć różnic w parsowaniu na niektórych serwerach i zapewnić lepszą kompatybilność.

W jakich scenariuszach używany jest tryb Query Only?

Używany, gdy masz query string URL w postaci ?name=张三&city=北京 i chcesz zakodować tylko wartości parametrów bez zmiany nazw kluczy i znaków. W tym przypadku name i city pozostają niezmienione, a wartości są kodowane jako %E5%BC%A0%E4%B8%89 i %E5%8C%97%E4%BA%AC.

Czy spacje powinny być kodowane jako + czy jako %20?

W formacie application/x-www-form-urlencoded (wysyłanie formularzy HTML) spacje są kodowane jako +. Ale w ścieżkach URL i w encodeURIComponent spacje są zawsze kodowane jako %20. To narzędzie domyślnie używa formatu %20.

Dlaczego różne narzędzia dają różne wyniki dla tego samego chińskiego znaku?

Zależy to od metody kodowania znaków. To narzędzie używa kodowania UTF-8 (standard webowy), chiński znak '中' jest kodowany jako %E4%B8%AD. Jeśli inne narzędzia używają kodowania GBK, wynik będzie %D6%D0. Zaleca się zawsze używać UTF-8 dla URL webowych.

Do czego służy podświetlanie kodowania?

Podświetla znaki zakodowane w formacie %XX (np. spacja→%20) w czasie rzeczywistym, pomagając zrozumieć reguły kodowania i rozwiązywać problemy. Litery i cyfry to bezpieczne znaki, które nie są kodowane, tylko chińskie i znaki specjalne są kodowane.

Czy sam znak % musi być kodowany?

Tak. % to znak początkowy escapowania w kodowaniu URL. Jeśli dosłowny % występuje w wartości parametru, musi zostać zakodowany jako %25; w przeciwnym razie zostanie błędnie zinterpretowany jako prefiks kodowania, co spowoduje błędy parsowania. Np. 100% musi być zakodowane jako 100%25.

Co to jest kodowanie URL?

Kodowanie URL (kodowanie procentowe) to proces konwersji niebezpiecznych znaków w URL na format %XX. URL mogą zawierać tylko niewielki podzbiór znaków ASCII (litery, cyfry, -_.~), wszystkie inne znaki (w tym chińskie, spacje, znaki specjalne) muszą zostać zakodowane przed przekazaniem w URL. Np. spacja staje się %20, chiński znak '中' staje się %E4%B8%AD.

**encodeURIComponent vs encodeURI**: To dwie najczęściej używane funkcje kodowania. encodeURIComponent koduje bardziej dokładnie, w tym separatory parametrów takie jak &, =, ?, więc nadaje się do kodowania pojedynczych wartości parametrów. encodeURI zachowuje strukturę URL (scheme://, ścieżka, /, ?, #), więc nadaje się do kodowania pełnych URL. Nieprawidłowe użycie prowadzi do błędów parsowania parametrów.

**RFC 3986 vs stare standardy**: RFC 3986 traktuje tyldę ~ jako bezpieczny znak niewymagający kodowania, podczas gdy wczesne standardy kodują ją jako %7E. Użycie RFC 3986 zmniejsza niepotrzebne escapowanie, poprawia czytelność URL i pozwala uniknąć problemów z parsowaniem %7E na niektórych serwerach.

**Tryb Query Only**: Używany, gdy chcesz zakodować tylko wartości parametrów w query string URL, bez zmiany nazw kluczy, znaków równości i znaków &. Np. ?name=张三 jest kodowane jako ?name=%E5%BC%A0%E4%B8%89, zachowując czytelne nazwy kluczy i kodując tylko wartości.

**Podświetlanie kodowania**: Podświetla w czasie rzeczywistym znaki w formacie %XX na bursztynowo, dzięki czemu użytkownicy od razu widzą, które znaki zostały zakodowane. Pomaga to zrozumieć reguły kodowania: litery i cyfry są zwykle bezpiecznymi znakami, które nie są kodowane, tylko chińskie i znaki specjalne są kodowane. Wszystkie obliczenia są wykonywane lokalnie w przeglądarce, dane nie są przesyłane.

术语表

Kodowanie procentowe (Percent-encoding)
Oficjalna nazwa kodowania URL, metoda kodowania reprezentująca znaki za pomocą % po którym następują dwie cyfry szesnastkowe. Np. spacja staje się %20, chiński znak '中' staje się %E4%B8%AD.Wikipedia - Percent-encoding
encodeURIComponent
Wbudowana funkcja JavaScript, koduje wszystkie znaki z wyjątkiem A-Z a-z 0-9 - _ . ! ~ * ' ( ). Najczęściej używana do kodowania pojedynczych wartości parametrów zapytania.
encodeURI
Wbudowana funkcja JavaScript, zachowuje znaki strukturalne URL (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) i koduje tylko znaki, które rzeczywiście wymagają kodowania. Służy do kodowania pełnych URL.
RFC 3986
Najnowszy standard IETF dla ogólnej składni URI (2005), definiuje reguły kodowania URL i klasyfikuje tyldę ~ jako znak niezarezerwowany (nie wymaga kodowania). Zastępuje stare RFC 2396 i RFC 1738.RFC 3986
Znaki zarezerwowane (Reserved Characters)
Znaki o specjalnym znaczeniu w URL, takie jak : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Te znaki muszą być kodowane, gdy są używane jako dane, ale nie w swoich pozycjach strukturalnych.
Znaki niezarezerwowane (Unreserved Characters)
Bezpieczne znaki, które mogą być używane w dowolnej pozycji URL bez kodowania, w tym A-Z, a-z, 0-9, -, _, ., ~ (zgodnie z RFC 3986).
Query String
Część URL po ?, składająca się z par klucz=wartość oddzielonych &. Np. w ?name=张三&age=20 name=张三 i age=20 to dwa parametry.
URLSearchParams
API dostarczane przez nowoczesne przeglądarki do wygodnego budowania i parsowania query string URL, z automatyczną obsługą kodowania i dekodowania. Bardziej bezpieczne i niezawodne niż ręczna konkatenacja ciągów.
application/x-www-form-urlencoded
Domyślny format wysyłania formularzy HTML, w którym spacje są kodowane jako + zamiast %20, co nieco różni się od encodeURIComponent. Frameworki serwerowe zwykle obsługują oba formaty automatycznie.
Kodowanie UTF-8
Standardowa metoda kodowania znaków w sieci. Podczas kodowania URL znaki nie-ASCII (takie jak chińskie, emoji) są najpierw konwertowane na sekwencje bajtów UTF-8, a następnie każdy bajt jest kodowany w formacie %XX.

Porównanie znaków escapowanych w 4 trybach kodowania

ZnakZnaczenieencodeURIComponentencodeURIRFC 3986
SpacjaSpacja%20%20%20
!Wykrzyknik%21!%21
#Identyfikator fragmentu%23#%23
$Znak dolara%24$%24
&Separator parametrów%26&%26
'Apostrof%27'%27
(Nawias otwierający%28(%28
)Nawias zamykający%29)%29
*Gwiazdka%2A*%2A
+Znak plus%2B+%2B
,Przecinek%2C,%2C
/Separator ścieżki%2F/%2F
:Dwukropek%3A:%3A
;Średnik%3B;%3B
=Znak równości%3D=%3D
?Znak zapytania%3F?%3F
@Małpa%40@%40
~Tylda%7E%7E~

Szybka ściągawka z powszechnymi zarezerwowanymi znakami URL

ZakodowaneOryginalny znakUżycie w URL
%20(spacja)Spacja
%21!Podseparator
%23#Identyfikator fragmentu (hash)
%25%Sam znak escapowania
%26&Separator parametrów zapytania
%2B+Znak plus / spacja w formularzu
%2F/Separator ścieżki
%3A:Separator schematu
%3D=Separator klucz-wartość
%3F?Początek query string
%40@Separator auth/e-mail
%5B[Parametr tablicy (RFC 3986)

Code Examples

Kodowanie/Dekodowanie URL w JavaScript

// encodeURIComponent: koduje pojedyncze wartości parametrów (najczęściej używane)
const param = encodeURIComponent('张三&李四');
console.log(param); // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B

// encodeURI: koduje pełny URL (zachowuje znaki strukturalne :/?#&=)
const url = encodeURI('https://example.com/search?q=witaj świecie');
console.log(url);

// Dekodowanie
const decoded = decodeURIComponent(param);
console.log(decoded); // 张三&李四

// Kompatybilność z RFC 3986 (~ nie kodowane)
function rfc3986Encode(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());
}

// API URLSearchParams (nowoczesny sposób, automatyczne kodowanie)
const params = new URLSearchParams({ name: '张三', city: '北京' });
console.log(params.toString());
// name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%AC

Kodowanie/Dekodowanie URL w Python

from urllib.parse import quote, unquote, urlencode, quote_plus

# quote: podobnie jak encodeURIComponent
encoded = quote('张三&李四')
print(encoded)  # %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B

# Tryb RFC 3986 (~ domyślnie nie kodowane)
print(quote('hello~world'))  # hello~world

# quote_plus: spacje kodowane jako + (format formularza)
print(quote_plus('hello world'))  # hello+world

// Dekodowanie
print(unquote(encoded))  # 张三&李四

// urlencode: budowanie query string
params = urlencode({'name': '张三', 'city': '北京'})
print(params)
# name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%AC

Kodowanie/Dekodowanie URL w Java

import java.net.URLEncoder;
import java.net.URLDecoder;
import java.net.URI;
import java.nio.charset.StandardCharsets;

public class URLEncodeExample {
    public static void main(String[] args) throws Exception {
        // Kodowanie URL (URLEncoder - format formularza, spacje stają się +)
        String encoded = URLEncoder.encode("张三&李四", "UTF-8");
        System.out.println(encoded);
        // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B

        // Dekodowanie
        String decoded = URLDecoder.decode(encoded, "UTF-8");
        System.out.println(decoded); // 张三&李四

        // Budowanie pełnego URL (klasa URI obsługuje kodowanie automatycznie)
        URI uri = new URI("https", "example.com", "/search", "q=witaj", null);
        System.out.println(uri.toASCIIString());
    }
}

Authoritative References