A kódolás százalékos in English URL-kódolás , más néven URL kódolás , egy mechanizmust kódoló információkat egy Uniform Resource Identifier (URI) bizonyos körülmények között. Bár URL-kódolásnak nevezik, általánosabban használják az elsődleges URI-n belül, amely tartalmazza az URL-t és az URN-t is. Mint ilyen, ez is használják az adatok előkészítése a média típusát (vagy MIME típus) application/x-www-form-urlencoded, ahogy az gyakran előfordul, amikor küldő HTML adatok formája a HTTP kérések .
Az URI-ban engedélyezett karakterek vagy fenntartva ( fenntartva ), nincsenek lefoglalva ( fenntartás nélkül ). Százalékos karakter is lehet a százalékos %kódolás részeként. A lefoglalt karakterek azok, amelyeknek néha különleges jelentése van. Például a perjel karakter az URL különböző részeinek (vagy általánosabban egy URI) elválasztására szolgál. A fenntartások nélküli karaktereknek nincs ilyen jelentőségük. A százalékos kódolás révén a fenntartott karakterek karaktersorozatokkal vannak ábrázolva. A fenntartott és nem fenntartott karakterkészletek, valamint azok a körülmények, amelyekben egyes fenntartott karakterek különleges jelentést kapnak, kissé megváltoztak az URI-kat és az URI-mintákat szabályozó specifikációk minden egyes felülvizsgálatával.
: | / | ? | # | [ | ] | @ | ! | $ | & | ' | ( | ) | * | + | , | ; | = |
A | B | C | D | E | F | G | H | I | J | K | M | L | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
a | b | c | d | e | f | g | h | i | j | k | m | l | n | o | p | q | r | s | t | u | v | w | x | y | z |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | - | . | _ | ~ |
Az URI többi karakterét százalékosan kell kódolni.
Amikor a fenntartott halmazban szereplő karakter ("fenntartott karakter") valamilyen kontextusban különleges jelentéssel bír (hogy "egy célra van fenntartva"), és egy URI-séma megköveteli a karakter használatát más célokra, akkor a karaktert százaléka kódolt . A fenntartott karakter százalékos kódolása magában foglalja a karakter konvertálását a bájtjának megfelelő értékére az ASCII-ben , majd ezt az értéket hexadecimális számpárként képviseli . A számokat, amelyeket egy menekülési karakterként használt százalékjel ( %) előz meg , az URI-be vezetik be a fenntartott karakterek helyett. (Nem ASCII karakter esetén általában UTF-8-ba konvertálják a bájtsorozatává , majd mindegyik bájtérték az alábbiak szerint jelenik meg.)
/Ha például egy URI "path" komponensében használjuk a fenntartott karaktert , akkor az útvonal szegmensei közötti elválasztó speciális jelentése lesz . Ha egy URI-séma szerint egy útvonalszegmensen belül kell lennie , akkor a három karaktert vagy a nyers helyett a szegmensben kell használni . /%2F%2f/
! | # | $ | & | ' | ( | ) | * | + | , | / | : | ; | = | ? | @ | [ | ] |
%21 | %23 | %24 | %26 | %27 | %28 | %29 | %2A | %2B | %2C | %2F | %3A | %3B | %3D | %3F | %40 | %5B | %5D |
Azok a fenntartott karakterek, amelyeknek nincs céljuk egy adott kontextusban, százalékosan is kódolhatók, de szemantikailag nem különböznek azoktól, amelyek nem.
Például az URI "party lekérdezési karakterláncában " ( lekérdezési karakterláncában ) (a karakter utáni rész ?) /továbbra is fenntartott karakternek tekintik, de általában nincs lefoglalt célja, hacsak egy séma adott URI másként nem rendelkezik. Ezért a karaktert nem kell százalékosan kódolni, ha nincs fenntartott célja.
Két URI, amelyek csak abban különböznek egymástól, hogy a fenntartott karakter százalékosan van kódolva az egyikben, míg a másikban úgy tűnik, általában nem tekinthető ekvivalensnek (ugyanazt az erőforrást jelölve), kivéve s 'megállapítható, hogy a kérdéses fenntartott karakter nincs fenntartott célja. Ez a meghatározás az egyes URI-sémák által a fenntartott karakterekre vonatkozóan megállapított szabályoktól függ.
A fenntartások nélküli karakterek soha nem igénylik a százalékos kódolást.
Az URI-k, amelyek csak abban különböznek egymástól, hogy egy fenntartatlan karaktert százalékosan kódolnak-e vagy olyannak látszanak-e, definíció szerint egyenértékűek, de az URI-tolmácsok a gyakorlatban nem mindig ismerik fel ezt az egyenértékűséget. Például nem szabad %41másként Avagy %7Emásként kezelni a húrokat ~, de vannak, akik igen. A maximális interoperabilitás érdekében nem ajánlott, hogy az URI-gyártók százalékosan kódolják a nem fenntartott karaktereket .
Mivel a percent karakter ( %) a százalékosan kódolt bájtok jelzőjeként szolgál, ezért magát is úgy kell kódolni, %25mintha egy URI-n belüli adatokként használnák.
A legtöbb URI-minta tetszőleges adatok, például az IP-cím vagy a fájlrendszer elérési útjának ábrázolását foglalja magában egy URI részeként. Az URI séma specifikációinak, de gyakran nem, egyértelmű egyezést kell biztosítaniuk az URI karakterei és az összes lehetséges adatérték között, amelyet az említett karakterek képviselnek.
Bináris adatokAz RFC 1738 1994-es megjelenése óta meghatározták, hogy azoknak a modelleknek, amelyek bináris adatok megjelenítését biztosítják egy URI-ben, fel kell osztaniuk az adatokat 8 bájtos bájtokra, majd az egyes bájtokat az alábbiak szerint százalékosan kell kódolniuk. . Például %0Fa 0x0F bájtértéket kell ábrázolni , de a 0x41 bájtértéket Avagy %41. Kódolatlan vagy alfanumerikus karakterek, valamint más fenntartás nélküli karakterek használata általában előnyös, mert rövidebb URL-eket hoz létre.
Karakter adatokA bináris adatok százalékos kódolására szolgáló eljárást gyakran extrapolálták, néha helytelenül vagy nem teljesen határozták meg, hogy a karakteralapú adatokra alkalmazzák. A világháló kezdeti napjaiban , amikor az ASCII könyvtár adatfeldolgozóinak feldolgozásáról és a hozzájuk tartozó ASCII bájtokról volt szó a kódolt szekvenciák százalékos meghatározásának alapjaként, ez a gyakorlat viszonylag ártalmatlan volt; egyszerűen azt feltételezték, hogy a karakterek és a bájtok megegyeznek egymással és felcserélhetők. Az ASCII tartományon kívüli karakterek ábrázolásának szükségessége azonban gyorsan nőtt, és az URI modellek és protokollok gyakran nem szolgáltattak szabványosított szabályokat az URI-ba foglalandó karakteradatok előkészítésére. Ennek eredményeként a webalkalmazások az ASCII-vel nem kompatibilis különféle többbájtos, dinamikus és egyéb kódolásokat kezdték használni a százalékos kódolás alapjaként, ami kétértelműséghez vezetett, és nehézséget okozott az URI-k megbízható értelmezésében.
Például sok URI modellek és protokollok alapján RFC 1738 és RFC 2396 feltételezik, hogy karakter adat lesz átalakítva bájt szerinti bizonyos karakterkódolásokat mielőtt képviselt egy URI által nem lefoglalt karakterek vagy bájtok kódolt százalékban. Ha a minta nem teszi lehetővé az URI számára, hogy nyomot nyújtson a használt kódolással kapcsolatban, vagy ha a kódolás ütközik az ASCII használatával a fenntartott és nem fenntartott karakterek százalékos kódolásához, akkor az l 'URI nem értelmezhető megbízhatóan. Egyes modellek teljesen nem veszik figyelembe a kódolást, ehelyett egyszerűen azt javasolják, hogy a karakteradatok közvetlenül megfeleljenek az URI-ban szereplő karaktereknek, így a megvalósítások nyitva hagyják, hogy az URI-ben lévő adatokat százalékosan kódolják-e és hogyan. sem a fenntartott halmazban, sem a fenntartatlan halmazban.
retour à la ligne | espace | " | % | - | . | < | > | \ | ^ | _ | ` | { | | | } | ~ |
%0A vagy %0D vagy %0D%0A | %20 | %22 | %25 | %2D | %2E | %3C | %3E | %5C | %5E | %5F | %60 | %7B | %7C | %7D | %7E |
Tetszőleges karakter adat Néha százalék kódolt és helyzetekben alkalmazott elkülönítve URI, mint például a jelszó elnyomja programok , vagy más rendszer- fordítási protokollokat .
Az általános URI szintaxisa azt javasolja, hogy az URI-ban a karakteradatok megjelenítésére szolgáló új URI-sémák reprezentálják az összes nem fenntartott karakter lefordítása nélkül , és az összes többi karaktert bájtokban konvertálják a kódoló UTF-8 szerint, majd kódolják ezek az értékek százalékban. Ezt a javaslatot 2005 - ben vezették be2005. januáraz RFC 3986 kiadásával. Az ezen időpont előtt bevezetett URI mintákat ez nem érinti.
A jelenlegi specifikáció nem foglalkozik azzal, hogy mi legyen a kódolt karakteradatokkal. Például a számítógépeken a karakteradatok valamilyen szinten kódolt formában nyilvánulnak meg, ezért URI karakterekké lefordítva bináris vagy karakteradatokként is kezelhetők. Vitathatatlanul az URI sablon specifikációin múlik, hogy figyelembe veszi-e ezt a lehetőséget, és megkövetelik-e az egyiket vagy a másikat, de a gyakorlatban csak nagyon kevesen, ha vannak ilyenek.
Van egy nem szabványos kódolás az Unicode karakterekhez:, ahol ---- az UTF-16 kód egysége, amelyet négy hexadecimális számjegy képvisel. Ezt a viselkedést egy RFC nem határozta meg, és a W3C elutasította . A nyolcadik alkalommal megrendezett ECMA-262 , még mindig tartalmaz egy funkciót (escape) szintaxis használatával, funkcióival és , amelyeket alkalmazni az UTF-8 kódolást egy karaktersorozatot, majd menekülni százalékban a bájtok benne eredmény. %u----escapeencodeURIencodeURIComponent
Amikor elküldi a HTML-űrlapokba bevitt adatokat, az űrlapmezők neveit és értékeit kódolják, majd a GET vagy POST módszerrel , vagy történelmileg e-mailben HTTP-kérelem üzenetben elküldik a kiszolgálónak . A kódolás az alapértelmezett alapul primitív változata URI százalékos kódoló szabályokat, számos módosítást, mint a szabványosítás a soremelés és cseréje terek +helyett %20. Az így kódolt adatok médiatípusa (MIME) application/x-www-form-urlencodeda HTML és XForms specifikációkban van megadva, és jelenleg is (még nagyon elavult) . Ezenkívül a CGI specifikáció szabályokat tartalmaz arra vonatkozóan, hogy a webszerverek hogyan dekódolják az ilyen adatokat és hogyan teszik elérhetővé az alkalmazások számára.
Amikor egy HTML-űrlapból származó adatokat HTTP GET-kérelemként küldünk, azokat a kérelem URI lekérdezési karakterláncába ( lekérdezési karakterláncába ) kell beilleszteni a fent leírt szintaxissal. Ha HTTP POST kérésben vagy e-mailben küldi el, az adatokat az üzenet törzsébe helyezi, és az említést az üzenet application/x-www-form-urlencodedfejlécében Content-Type(tartalomtípusában) tartalmazza.
Az alábbi specifikációk valamilyen formában meghatározzák és címezik a fenntartott, fenntartás nélküli és százalékos kódolást:
Példa URL kódolóra a VBA-ban (fr)