UltKit

URL kódolás és dekódolás

Alakítsa a szöveget URL-be biztonságosan beilleszthető formára, vagy a %20-hoz hasonló sorozatokat alakítsa vissza olvasható karakterekké. Az eszköz a böngésző saját encodeURIComponent, encodeURI és decodeURIComponent függvényeit használja, a lekérdezési paramétereket táblázatban mutatja, és semmit sem küld szerverre.

Mód

0 karakter · 0 szó · 0 sor

0 karakter · 0 szó · 0 sor

Teljes egészében ebben a böngészőlapon fut. A szöveget soha nem töltjük fel és nem tároljuk.

Mit kódol az egyes függvény

A böngésző saját függvényeivel számolva. Az encodeURIComponent a betűket, számjegyeket és ezeket a jeleket hagyja érintetlenül: ! ' ( ) * - . _ ~

KarakterencodeURIComponentencodeURI
(szóköz)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

Százalékos kódolás és az RFC 3986 fenntartott karakterei

Az URL csak az ASCII karakterek korlátozott körét tartalmazhatja. Az URI-szintaxis 2005-ös specifikációja, az RFC 3986 ezeket két csoportra osztja. A nem fenntartott karaktereket (A–Z, a–z, 0–9 és a négy jel: - . _ ~) soha nem kell kódolni. A fenntartott karaktereknek szerepük van: az általános elválasztók (: / ? # [ ] @) választják el a sémát, a gazdagépet, az útvonalat, a lekérdezést és a töredéket, az al-elválasztók (! $ & ' ( ) * + , ; =) pedig az ezeken belüli elemeket, ahogy az & és az = teszi a lekérdezési karakterláncban. Minden más karaktert, és minden fenntartott karaktert, amelyet egyszerű adatként használunk, százalékkódolni kell.

A százalékkódolás egy bájtot %-ként ír le, utána két hexadecimális számjeggyel. A szöveget előbb UTF-8-ra alakítja, így a szóköz %20 lesz, az é (két bájt) %C3%A9, egy emoji pedig négy %XX csoport. Ezért kerül a „café & bar” keresés a linkbe így: caf%C3%A9%20%26%20bar. Az & kódolva van, hogy a szerver ne új paraméter kezdetének olvassa.

encodeURIComponent, encodeURI és a dekódolás

Az encodeURIComponent egyetlen darabhoz való, például lekérdezési értékhez, útvonalszakaszhoz vagy paraméterként átadott átirányítási URL-hez. Mindent kódol, kivéve a nem fenntartott karaktereket és a ! ' ( ) * jeleket, amelyeket a JavaScript történelmi okokból érintetlenül hagy. Az encodeURI (teljes URL) feltételezi, hogy a bemenet már teljes cím, ezért a fenntartott karaktereket megtartja, így a https://example.com/a b?q=1 címben csak a szóköz lesz kódolva. Az encodeURI használata paraméterértéken klasszikus hiba: az értékben lévő & vagy # megmarad, és elrontja az URL-t.

A Dekódolás mindkét függvényt visszafordítja. A GET módszerrel küldött HTML-űrlapok a régebbi application/x-www-form-urlencoded formátumot használják, ahol a szóközt %20 helyett + jelöli; ezeknél hagyja bejelölve a A + jel szóköznek számít beállítást, és vegye ki a jelölést, ha a plusz jel szó szerint számít, például telefonszámnál. Ha a bemenetben olyan % szerepel, amely után nem két hexadecimális számjegy áll, vagy érvénytelen UTF-8 bájtok vannak, a dekódolás találgatás helyett egyértelmű hibaüzenettel leáll. Ha a szöveg lekérdezési karakterláncot tartalmaz, a paraméterei dekódolva, táblázatban jelennek meg az eszköz alatt. Bináris adatokhoz az URL-ekben általában a Base64url a megfelelő alternatíva.

Gyakori kérdések

A szóköz az URL-ben %20 vagy pluszjel legyen?
Útvonalakban és az RFC 3986 szerint a szóköz %20. A + jel csak a HTML-űrlapok módján kódolt lekérdezési karakterláncokban jelent szóközt, ezért a %20 mindenhol biztonságos választás.
Miért került %2520 az URL-embe?
Kétszer lett kódolva. Az első menet a szóközt %20-ra alakította, a második magát a %-jelet kódolta %25-té. Egyszer dekódolva megszűnik a felesleges réteg; az értékeket a kódban csak egy ponton kódolja.
Mely karaktereket nem kell soha százalékosan kódolni?
Az RFC 3986 nem fenntartott karakterei: az A–Z betűk kis- és nagybetűvel, a 0–9 számjegyek, valamint a kötőjel, a pont, az alsó vonal és a hullámvonal.
Tartalmazhat egy URL ékezetes vagy nem latin betűket kódolás nélkül?
A böngészők megjelenítik őket, de a hálózaton az útvonalban vagy lekérdezésben lévő minden nem ASCII karakter százalékkódolt UTF-8-ként megy át. A tartománynevek külön rendszert, Punycode-ot használnak, amely xn-- címkékké alakítja őket.
Miért jelez hibás sorozatot a dekódolás?
A szövegben olyan % van, amely után nem két hexadecimális számjegy áll, például egy szó szerinti „100%”, vagy a bájtok érvénytelen UTF-8-ként dekódolódnak. A magányos %-jeleket dekódolás előtt kódolja %25-té.