Kodowanie procentowe w URL: co naprawdę znaczą %20, + i %2F
Kodowanie procentowe zapisuje znak, którego URL nie może bezpiecznie przenosić, jako znak procenta, po którym następuje wartość bajtu w systemie szesnastkowym. Spacja zamienia się w %20, znak & w %26, a ukośnik w %2F. Kodowanie chroni strukturę linku, ponieważ znaki takie jak & i = rozdzielają części ciągu zapytania.
Które znaki mogą zostać bez zmian
Standard URI (RFC 3986), na którym opierają się adresy URL, nie wymaga kodowania liter A–Z i a–z, cyfr oraz czterech znaków - _ . ~. Pozostałe znaki pełnią w adresie określoną funkcję. Dwukropek oddziela schemat od reszty, ukośnik rozdziela fragmenty ścieżki, znak zapytania rozpoczyna zapytanie, krzyżyk zaczyna fragment, a & i = dzielą zapytanie na nazwy i wartości. Znak pełniący funkcję strukturalną trzeba zakodować wtedy, gdy ma być traktowany jako dane, a nie jako element struktury.
Dlatego ten sam znak bywa kodowany w jednym miejscu, a w innym nie. W wartości zapytania znak & musi być zapisany jako %26, bo inaczej link zostanie podzielony w złym miejscu. W ścieżki linku jest zwykłym znakiem.
Litery spoza alfabetu angielskiego
Litery spoza podstawowego alfabetu angielskiego koduje się jako bajty UTF-8, a każdy bajt zapisuje się jako kod procentowy. Litera é w słowie café to dwa bajty C3 i A9, więc zapisuje się ją jako %C3%A9, a całe słowo jako caf%C3%A9.
Prosty przykład pokazuje te zasady w praktyce. Tekst a b&c=d/é, zakodowany jako komponent, da a%20b%26c%3Dd%2F%C3%A9. Każdy znak, który nie jest bezpieczną literą, cyfrą ani znakiem specjalnym, zostaje zakodowany: spacja, &, znak równości, ukośnik i litera z akcentem.
Komponent czy cały URL
Istnieją dwa rodzaje kodowania i każdy ma swoje zastosowanie. Kodowanie komponentu traktuje każdy zastrzeżony znak jako dane. Stosuje się je do pojedynczej wartości, na przykład wyrazu wyszukiwania albo nazwy pliku w linku. Zakodowanie „rock & roll” jako wyrazu wyszukiwania daje rock%20%26%20roll, więc znak & pozostaje wewnątrz wartości.
Kodowanie całego URL zachowuje strukturę. Zakodowanie https://example.com/a b daje https://example.com/a%20b, a ukośniki i dwukropek pozostają bez zmian. Używa się go dla pełnego adresu, który trzeba poprawić, a nie dla wartości umieszczanej wewnątrz linku.
Narzędzie URL ma z tego powodu ustawienia Komponent i Pełny URL. Dekodowanie pełnego URL zachowuje też zakodowane znaki strukturalne, takie jak %26 i %3D, dzięki czemu link nadal działa po zdekodowaniu.
Znaki plus i dane formularzy
Formularze internetowe stosują inną konwencję. Gdy formularz jest wysyłany jako dane formularza, spacja zapisywana jest jako +, a nie jako %20. Dosłowny znak plus zapisuje się wtedy jako %2B. Zatem wyrażenie C++ tips staje się C%2B%2B+tips w danych formularza, a C%2B%2B%20tips w zwykłym kodowaniu komponentu.
Dekodowanie działa tak samo. W ciągu zapytania + zwykle oznacza spację. W ścieżce linku + jest znakiem plus. Narzędzie traktuje + jako spację tylko wtedy, gdy zaznaczono opcję Używaj + jako spacji (dane formularza). Dlatego wyłączaj ją przy ścieżkach i przy wartościach, w których plus jest rzeczywisty.
Jak czytać długi ciąg zapytania
Link często przenosi ustawienia po znaku zapytania. Oto przykład:
https://shop.example/search?q=red%20shirt&size=M&tag=summer%2Bsale
Po zdekodowaniu widać, że wyszukiwana jest red shirt, rozmiar to M, a tag to summer+sale. Zapis %2B pozostaje znakiem plus, ponieważ był zakodowany. Wklej link do narzędzia URL, a pokaże ono każdą nazwę i wartość po zdekodowaniu, co ułatwia czytanie długich linków. Jeśli chcesz krótszy adres bez parametrów śledzących, najpierw wyczyść link.
Podwójne kodowanie
Najczęstszy błąd to zakodowanie wartości dwa razy. Ponowne zakodowanie tekstu %20 daje %2520, bo sam znak procenta zostaje zakodowany jako %25. Strona szuka wtedy dosłownego %20 w wartości, więc wyszukiwanie lub strona nie działa. Zdekoduj link raz, sprawdź wynik i koduj wartość tylko wtedy, gdy jest to potrzebne.
Uszkodzone sekwencje
Po znaku procenta muszą następować dwie cyfry szesnastkowe, a dla liter z akcentami cyfry muszą tworzyć poprawny UTF-8. Link ucięty w połowie albo przypadkowy znak procenta wpisany w tekst może zostawić uszkodzoną sekwencję, na przykład %E0%A4%A. Narzędzie dekoduje to, co się da, pozostawia uszkodzone bajty dokładnie w takiej postaci, w jakiej są, i informuje, ile z nich nie udało się zdekodować. Nie zatrzymuje się na pierwszym błędzie.
Przypadki szczególne
- Spacje w ręcznie wpisanym linku. Pasek adresu przeglądarki koduje spacje za ciebie, ale link skopiowany do dokumentu może nadal zawierać surowe spacje. Zakoduj je, zanim wyślesz link dalej.
- Nazwy domen spoza alfabetu łacińskiego. Używają osobnego systemu, punycode, a kodowanie ścieżki lub zapytania nie zmienia nazwy hosta.
- Połówka emotikony. Uszkodzona kopia może zostawić pojedynczą połówkę znaku zastępczego, której nie da się zakodować. Narzędzie zastępuje ją symbolem zastępczym i informuje cię o tym.
- Base64 w linkach. Wartość Base64 w linku podlega własnym zasadom, w których zamiast + i / występują - i _. Zobacz Base64 – co to jest.
Jak to zrobić w fixmint
- Wklej tekst lub link w pole Tekst lub URL.
- Wybierz Koduj albo Dekoduj, a następnie Komponent dla jednej wartości lub Pełny URL dla całego adresu.
- Zaznacz Używaj + jako spacji (dane formularza) dla linków skopiowanych z formularza internetowego.
- Dla linku odczytaj Parametry zapytania, zdekodowane, aby zobaczyć każdą nazwę i wartość.
- Skopiuj wynik.
Szybkie odpowiedzi
Co oznacza %20?
Spację. Jej wartość bajtu to 20 w systemie szesnastkowym.
Dlaczego w moim linku jest + zamiast %20?
Link prawdopodobnie pochodzi z formularza, w którym + oznacza spację. Opcja „Używaj + jako spacji (dane formularza)” go zdekoduje.
Dlaczego widzę %2520 w moim linku?
Wartość została zakodowana dwa razy. Znak procenta z %20 został ponownie zakodowany jako %25. Zdekoduj raz, aby wrócić do %20, i ponownie, aby uzyskać spację.
Przetłumaczone z Wersja angielska przy wsparciu AI.
Komentarze
Brak komentarzy. Bądź pierwszy.


