Kodowanie URL
Podświetlenie to procentowo zakodowany bajt.
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
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.
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
Jak Używać
- Wprowadź lub wklej URL lub tekst do zakodowania/odkodowania
- Wybierz kierunek kodowania (Koduj/Dekoduj) i tryb (Component / URI / full / RFC 3986)
- Włącz tryb wsadowy dla danych wieloliniowych lub Query Only dla kodowania tylko wartości parametrów
- Sprawdź podświetlony wynik i skopiuj zakodowany ciąg do użycia w wywołaniach API lub budowaniu URL
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
Przykłady kodu
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%ACKodowanie/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%ACKodowanie/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());
}
}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.
Słownik
- 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
| Znak | Znaczenie | encodeURIComponent | encodeURI | RFC 3986 |
|---|---|---|---|---|
Spacja | Spacja | %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
| Zakodowane | Oryginalny znak | Uż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) |
Authoritative References
- Bezpieczne porównanie ciągów znaków
- Konwersja binarna
- Szyfr Cezara
- Kod Morse'a
- Szesnastkowy
- Video do Base64
- Base64 na wideo
- Obraz na Base64
- Base64 na obraz
- Tekst na Base64
- Base64 na tekst
- Weryfikacja haszu pliku
- Plik na Base64
- Base64 na plik
- Audio na Base64
- Base64 na Audio
- Szyfrowanie i deszyfrowanie AES
- Szyfrowanie i deszyfrowanie DES
- Koder Dekoder Base32
- Base58 kodowanie i dekodowanie
- Kodowanie Base64
- Dekodowanie Base64
- Porównanie Base64
- Podział Base64
- Base64 łączenie wielu linii
- Formatowanie Base64
- Sprawdzanie formatu Base64
- Wsadowe kodowanie Base64
- Batchowe dekodowanie Base64
- Czyszczenie Base64
- Narzędzie paddingu Base64
- Statystyki długości Base64
- Base64 na szesnastkowy
- Konwerter Base64 DataURL
- Konwerter Base64-Hex
- Koder/Dekoder Base85
- Generator i weryfikator HMAC
- Derywacja klucza PBKDF2
- Skrót MD5
- Hash SHA-256
- Hash SHA-1
- Hash SHA512
- Narzędzie JWT
- Kodowanie i dekodowanie encji HTML
- Unikod - sekwencje ucieczki
- Kodowanie URL
- Base64 URL Safe
- MIME Base64
- Obfuskacja Java
- Obfuskacja JS
- Obfuskacja PHP
- Obfuskacja Python