Digitális és informatikai

URL-kódolás: ékezetek, szóközök és kettős kódolás ellenőrzése

Egy magyar keresőkifejezésen követjük a bájtokat a százalékos URL-kódolásig. Megmutatjuk az elválasztójelek, a pluszjel és a kétszeri kódolás eltéréseit.

Dajka Gábor7 perc olvasásFrissítve: 2026-10-17

Egy URL-be kerülő magyar keresőkifejezést önálló paraméterértékként kódolj. A teljes címet egyetlen szövegként átalakítva könnyen eltüntetheted azokat az elválasztójeleket is, amelyekből a böngésző vagy a szerver felismeri a cím részeit. A hibakeresésnél ezért előbb azt döntsd el, pontosan melyik rész volt adat, és melyik rész választotta el az adatokat.

Mit jelent a százalékjel utáni két karakter?

A százalékos jelölés egy bájtot ír le két hexadecimális számjeggyel. A szóköz bájtja például %20 formában jelenhet meg. Egy több bájtos UTF-8 betű több ilyen egységet kap. Az URI-szabvány az elválasztók és az adatként használt jelek kezelését is megkülönbözteti.

Az átalakított rész hosszát egy konkrét kódolási szabálynál így számolhatod:

Kimeneti karakterszám = változatlanul hagyott ASCII-bájtok + 3 × kódolt bájtok.

Ez a méretképlet az elkészült paraméterértékre érvényes. A mező neve, az egyenlőségjel és a cím többi része ezen felül jelenik meg.

Szemléltető példa magyar keresőkifejezéssel

Legyen az adat: „könyv & ár”. Láthatóan tíz karakterből áll, a két szóközt is beleszámítva. UTF-8-ban tizenkét bájt hosszú, mert az ö és az á két-két bájtos. Az ékezetes betűk bájthosszának hátterét az UTF-8 specifikáció írja le.

Ha a szóközöket %20 formában írjuk, a kódolt érték:

k%C3%B6nyv%20%26%20%C3%A1r

Öt bájt marad változatlanul: k, n, y, v és r. Hét bájtot kódolunk: a két ékezetes betű négy bájtját, a két szóközt és az & jelet. Az eredmény 5 + 3 × 7 = 26 karakter. A tizenkét bemeneti bájthoz képest ez 14 karakter többlet.

A különbség itt működési szempontból is számít. A keresőkifejezésben az & az adat része. Ha egy lekérdezésben kódolatlan elválasztóként szerepel, a fogadó alkalmazás külön paraméter kezdetének tekintheti. A URL kódoló és dekódoló segítségével a paraméterértéket alakítsd át, majd az URL-elemzőben ellenőrizd a kész cím részeit.

Szóköz és pluszjel

A webes űrlapok application/x-www-form-urlencoded alakjában a szóköz helyén pluszjel is állhat. Ebben a formátumban egy valódi pluszjelet külön kell kódolni. Ezt a saját szabályt a WHATWG URL-szabvány űrlapkódolási fejezete írja le.

Egy általános URL-komponens dekódolása és egy űrlapadat feldolgozása ezért eltérően bánhat ugyanazzal a pluszjellel. Ha egy terméknévben vagy keresőkifejezésben tényleges + szerepel, ellenőrizd a visszaalakított értéket is. A karakter szemre hasonló helyettesítése könnyen módosítja a keresést.

Próbaminta, amely a pluszjelet is megőrzi

Használd a C++ & C# szöveget egy paraméter értékeként. Nyolc ASCII-bájtból áll; a két pluszjel, a két szóköz, az & és a # eltérő hibákat tehet láthatóvá.

ÁtalakításA paraméter kódolt értékeHossz
Komponenskódolás, %20 szóközökkelC%2B%2B%20%26%20C%2320 karakter
Űrlapkódolás, + szóközökkelC%2B%2B+%26+C%2316 karakter

Az első sorban két C marad változatlan, hat bájt háromkarakteres jelölést kap: 2 + 6 × 3 = 20. Az űrlapos alakban a két szóköz egy-egy pluszjel, ezért négy karakterrel rövidebb. A tényleges pluszjelek mindkét sorban %2B-ként szerepelnek.

A fogadó oldalon a megfelelő szabály szerint visszaalakított értéknek pontosan C++ & C#-nak kell lennie. Ha a pluszjelek helyén szóköz jelenik meg, a + értelmezésénél keresd az eltérést. Ha az & után külön paraméter keletkezik, az adatot túl korán bontották részekre. A teljes URL-ben egy nyers # töredékazonosítót kezd; a mintában szereplő # ezért a paraméteren belül kódolva marad.

Ugyanezt a rövid mintát kövesd végig a cím összeállításán, a továbbításon és a fogadó rendszer értékén. Így megállapítható, melyik lépésben változott meg az adat.

A kódolás helyét is rögzítsd. A URLSearchParams szabályai szerint működő paraméterépítőnek a nyers C++ & C# értéket add át: az összeállításkor maga végzi el az űrlapkódolást. Ha előre kódolt C%2B%2B szöveget adsz neki, a százalékjelek is új kódolást kapnak, és a fogadó egyetlen visszaalakítás után C%2B%2B szöveget kap. A DG komponenskódoló eredményét ezért csak olyan helyre illeszd, amely már kódolt paraméterrészletet vár. A két út közül a fogadó művelet bemeneti szabálya dönti el a megfelelőt.

Azonosnak látszó ékezet, eltérő bájtok

Az é lehet egyetlen U+00E9 kódpont, vagy egy e és az utána álló U+0301 ékezetjel együttese. A Unicode normalizálási leírása ezeket kanonikusan egyenértékű alakokként kezeli. A két karaktersorozat bájtjai ettől még eltérnek.

Az é betű előállításaUTF-8 méretSzázalékosan kódolt alak
Egyetlen U+00E92 bájt%C3%A9
U+0065 és U+03013 bájte%CC%81

Az első kódolt érték hat, a második hét ASCII-karakter. Mindkettő visszaalakulhat egy képernyőn é-nek látszó szöveggé. A kódolt címek egyszerű karakterenkénti összevetése így eltérést mutat.

Ha a rendszered a felhasználói keresőszöveget egységesen NFC-alakban kezeli, ezt a szöveg szintjén, a százalékos kódolás előtt végezd el. A fogadó oldallal ugyanazt a szabályt egyeztesd. Egy külső rendszer átlátszatlan azonosítóját vagy aláírt paraméterét csak a saját előírása szerint módosítsd: az önkényes normalizálás az adat azonosságát is megváltoztathatja. A százalékos kódolás ellenőrzése mellé ezért őrizd meg az eredeti karaktersorozatot is.

Hogyan ismered fel a kettős kódolást?

Egy már kódolt %20 rész újbóli kódolásakor a százalékjel is adattá válik. A jelölésből %2520 lehet: a %25 a százalékjel kódja, utána megmarad a 20. Az eredeti három karakterből így öt lesz.

Egyetlen visszafejtés ebből %20 szöveget ad. Még egy visszafejtés szóközt állíthat elő. A kettő közül a helyes eredményt az adat útja dönti el; az ismételt dekódolás találomra végrehajtva tényleges adatot is megváltoztathat. Az RFC 3986 ezért külön figyelmeztet az azonos szöveg ismételt kódolására és dekódolására.

Próbálj ki egy rövid, ismert értéket az éles adatfolyam előtt. Jegyezd fel a bemeneti szöveget, az egyszer kódolt alakot és a fogadó rendszerben megjelenő szöveget. Ha a három lépés követhető, a hosszú paraméterek hibája is gyorsabban behatárolható.

Záró tudáspróba

Kérdésenként egy választ jelölj meg, majd a megoldások alapján pontozd magad. Ez a három kérdés a cikkben bemutatott összefüggéseket ellenőrzi.

1. A „könyv & ár” 12 UTF-8 bájtjából 5 változatlan ASCII-bájt marad, 7 százalékos kódolást kap. Hány karakter az így kódolt érték?

  • A) 36.
  • B) 12.
  • C) 26.

2. A nyers C++ & C# keresőkifejezést URLSearchParams segítségével illeszted a címbe. Mit adj át értékként?

  • A) Csak a C szöveget, mert a többi jel nem továbbítható.
  • B) Az előre kódolt C%2B%2B%20%26%20C%23 szöveget.
  • C) A nyers C++ & C# szöveget; az eszköz végzi a kódolást.

3. Egy kódolt paraméterben %2520 szerepel. Mit kapsz egyetlen szabályos százalékos dekódolás után?

  • A) Egy szóközt.
  • B) A %20 háromkarakteres szöveget.
  • C) Üres szöveget.

Megoldások és pontozás

1. C. Minden kódolt bájt három karaktert kap, ezért 5 + 3 × 7 = 26. A paraméternév és a teljes URL többi része ezen felül számít. Ismétléshez: Szemléltető példa magyar keresőkifejezéssel.

2. C. A paraméterépítő a nyers értéket kódolja. Előre kódolt bemenetnél a százalékjelek újabb %25-öt kapnának, és megváltozna az egyszer dekódolt érték. Ismétléshez: Próbaminta, amely a pluszjelet is megőrzi.

3. B. A %25 a százalékjelet állítja vissza; a 20 ezután megmarad. Újabb dekódolást csak az adat útja és a fogadó szabálya alapján szabad végezni. Ismétléshez: Hogyan ismered fel a kettős kódolást?.

Minden helyes válasz 1 pont; a hibás vagy kihagyott válasz 0 pont. Az összpontszám 0–3 lehet.

  • 0 pont: dolgozd végig újra a három megoldásban megjelölt részt, és írd le a példák kiinduló feltételeit.
  • 1 pont: a két elhibázott kérdésnél vezesd le a helyes választ; külön írd mellé, melyik feltétel vagy számolási lépés maradt ki.
  • 2 pont: térj vissza az egyetlen elhibázott kérdéshez kapcsolt részhez, majd egy bemenet megváltoztatásával ellenőrizd újra az eredményt.
  • 3 pont: a három összefüggést ebben a feladatsorban helyesen alkalmaztad. Próbáld ki a cikk egyik ellenőrzését saját adatokkal, a feltételeket és a mértékegységeket is feljegyezve.
További cikkek

Kapcsolódó olvasnivalók

Gyorskereső

Kalkulátorok és útmutatók keresése

↑↓ választásEnter megnyitásEsc bezárás