Mi ez az eszköz?
Az URL kódolás (százalékkódolás) az URL-ekben nem megengedett karaktereket egy % jellel, majd a bájtértékük hexadecimális alakjával helyettesíti — a szóközből %20 lesz, a 你-ból pedig %E4%BD%A0. Enélkül olyan karakterek, mint a szóköz, az &, a ? és a nem ASCII szöveg megtörnék az URL szerkezetét, vagy félreértelmezné a szerver.
Két gyakori igény van, és ez az eszköz mindkettőt támogatja: egy lekérdezési paraméterbe kerülő érték kódolása (komponens mód — a / ? & = jeleket is kódolja), és egy teljes URL kódolása a szerkezetének megőrzésével (teljes URL mód — érintetlenül hagyja a :// ? & jeleket).
Egy érdemes megjegyzésre méltó történelmi furcsaság: a szóköz helyesen %20 az URL szabvány szerint (RFC 3986), de a HTML űrlap-beküldések hagyományosan plusz jellel kódolták — ezért látod mindkettőt a gyakorlatban, a q=hello%20world és a q=hello+world formát is, és ezért kell néha az űrlapadatok dekódolásakor a + jelet külön kezelni.
Miért érdemes használni?
- Építs biztonságosan lekérdezési karakterláncokat — a &, = vagy szóközöket tartalmazó felhasználói bemenet nem töri meg az URL-edet.
- Dekódolj hosszú, kódolt URL-eket naplókból, analitikából vagy átirányítási láncokból, hogy lásd, mit is jelentenek valójában.
- Helyes UTF-8 kezelés kínai szöveghez, emojikhoz és más nem ASCII szöveghez.
- Két mód, hogy véletlenül ne kódold be egy teljes URL : és / jeleit.
- Ingyenes, azonnali, nincs feltöltés.
Használati útmutató
- Illeszd be a szövegedet vagy URL-edet a beviteli mezőbe.
- Válaszd ki a módot: „Komponens” a lekérdezési paraméterbe kerülő értékekhez, „Teljes URL” egész URL-ekhez.
- Kattints a „Kódolás” vagy „Dekódolás” gombra.
- Másold ki az eredményt.
Példa
Bemenet
https://example.com/search?q=hello world & 你好Kimenet
Komponens mód: https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%20%26%20%E4%BD%A0%E5%A5%BD
Teljes URL mód: https://example.com/search?q=hello%20world%20&%20%E4%BD%A0%E5%A5%BDA komponens mód a szerkezeti karaktereket is kódolja; a teljes URL mód megőrzi őket.
Gyakori felhasználási esetek
- Egy megosztható URL összeállítása, ahol egy keresési kifejezés vagy szűrőérték felhasználói bemenetből származik, és tartalmazhat szóközöket, & jelet vagy más speciális karaktereket.
- Egy hosszú követő vagy átirányító URL dekódolása egy e-mailből vagy hirdetési kampányból, hogy lásd a tényleges célt és paramétereket, mielőtt rákattintanál.
- Annak kiderítése, miért nem olvassa be helyesen egy szerver egy lekérdezési paramétert — gyakran egy fenntartott karakter az oka, amelyet kódolni kellett volna, de nem történt meg.
- Nem angol (kínai, japán, arab stb.) érték előkészítése egy URL lekérdezési karakterlánchoz.
encodeURIComponent és encodeURI a gyakorlatban
Ezek közvetlenül megfelelnek ennek az eszköznek a két módjának, és valódi JavaScript funkcióknak felelnek meg, amelyeket a fejlesztők már ismernek: az encodeURIComponent (komponens mód) mindent kódol egy kis, nem fenntartott karakterhalmaz kivételével, így biztonságos bármely, egy URL-be beszúrt egyedi érték számára — ezt használod lekérdezési paraméterhez, útvonalszegmenshez vagy hash-fragmens értékhez. Az encodeURI (teljes URL mód) érintetlenül hagyja az URL szerkezeti karaktereit (:, /, ?, #, &, =), mert feltételezi, hogy egy teljes, már strukturált URL-t kódolsz, nem egy nyers értéket — ha egyetlen paraméterértékre alkalmaznád, nem kódolná az abban esetleg szereplő & vagy = karaktereket, ami a leggyakoribb hiba a rossz mód kiválasztásakor.
Fenntartott és nem fenntartott karakterek
Az URL specifikáció (RFC 3986) két csoportba osztja a karaktereket: a nem fenntartott karakterek (betűk, számok, - _ . ~) mindig biztonságosak és sosem kódolódnak, míg a fenntartott karakterek (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) speciális jelentéssel bírnak az URL szerkezetében, és csak akkor kell kódolni őket, ha szó szerinti adatként jelennek meg, nem szerkezeti írásjelként. Pontosan ezért létezik a két mód — a komponens mód adatnak tekinti a fenntartott karaktereket, amelyeket védeni kell, a teljes URL mód szerkezetnek, amelyet meg kell őrizni. Ennek a különbségnek a megértése hasznosabb, mint memorizálni, mikor melyik módot kell használni, mivel megmagyarázza, miért kódolódik ugyanaz a karakter (pl. &) néha, máskor viszont nem, attól függően, milyen szerepet tölt be az adott URL-ben.
Gyakori kérdések
Mikor használjam a komponens módot, és mikor a teljes URL módot?
Komponens módot (encodeURIComponent) akkor, ha egyetlen értéket kódolsz, amely egy lekérdezési paraméterbe kerül — ez kódolja a /, ?, & és = jeleket, hogy ne törhessék meg az URL-t. Teljes URL módot (encodeURI) akkor, ha egy teljes URL-t kódolsz — ez megtartja a szerkezeti karaktereket, hogy az URL továbbra is működjön.
Miért %20 jelent meg a szóköz helyett a + jel helyett?
Mindkettő érvényes, más-más kontextusban. A %20 a szóköz univerzális százalékkódolása; a + jel csak a régebbi application/x-www-form-urlencoded formátumú lekérdezési karakterláncokon belül jelent szóközt. Ez az eszköz %20-at használ, ami mindenhol működik.
Miért hibázik a dekódolás?
A bemenet hibás százalékos szekvenciát tartalmaz, például egy %-ot, amelyet nem két hexadecimális számjegy követ. Ez gyakran akkor fordul elő, ha egy URL megszakadt vagy kétszer lett dekódolva. Javítsd vagy távolítsd el a hibás % szekvenciát.
Mi a dupla kódolás?
Már kódolt szöveg újbóli kódolása: a %20-ból %2520 lesz, mert maga a % is kódolódik %25-re. Ez egy gyakori hiba — ha a dekódolt kimeneted még mindig % kódokat tartalmaz, dekódold még egyszer.
Kezeli a kínai karaktereket és az emojikat?
Igen. A szöveg UTF-8 bájtokként kódolódik, így a 你好-ból %E4%BD%A0%E5%A5%BD lesz, és tökéletesen visszadekódolható — ugyanez a viselkedés, mint a böngészőknél.