e-gradiva     HTML CSS JavaScript Načrtovanje    
  logotip  
SERŠ Maribor Iskanje Primeri
Odpri povezavo

URL in nizno kodiranje

Ko brskalniki in strežniki komunicirajo, nekateri neabecedni in nenumerični znaki, ki jih imamo za samoumevne (kot je presledek) ne morejo opraviti potovanja v svoji izvirni obliki. Samo omejen skupek črk, števil in ločil je dovoljen. Za prilagoditev ostalih morajo znaki biti kodirani s posebnim simbolom (%) in njihovimi šestnajstiškimi vrednostmi ASCII . Na primer, znak za presledek je hex 2O (ASCII desetiška 32). Ko je odkodirano, izgleda kot %20. Verjtno je vsak pozoren obiskovalec Interneta videl ta simbol v brskalnikovi zgodovini.

JavaScript vključuje dve funkciji, escape() in unescape(), ki ponujata takojšnjo pretvorbo celih nizov. Za pretvorbo navadnega niza z ubežnimi sekvencami, se uporabi funkcijo escape(), kot v

escape("SERS Maribor") // rezultat = "SERS%20MAriborr"

Funkcija unescape() pretvori ubežne sekvence v za človeka berljivo obliko.

escape("niz")

Funkcija escape() kodira niz, ki vsebuje znake, ki omogočajo prenos podatkov. Niz je zanesljivo prenosen, če ga lahko zanesljivo pošljemo po različnih omrežjih do kateregakoli računalnika, ki podpira kodiranje ASCII.

Da bo niz prenosljiv, lahko vsebuje naslednje znake:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567890
@*-_+./

Ostali morajo biti kodirani z dvoštevilčnim (%xx) ali štiristevilčnim (%uxxxx) ekvivalentom. Na primer presledek je predstavljen kot %20.

1. primer:

document.write(escape("Strokovna gimnazija."))

2. primer:

document.write(escape("%!@#$%^&*()_+|čšž"))

unescape("niz")

Funkcija unescape() dekodira niz, ki je bil kodiran s funkcijo escape().

Funkcija išče dvo in štirištevilčna šestnajstiška števila, in jih zamenja niz z določenim znakom z znakom.

Primer:

document.write(unescape("Maribor%20je%20mesto%20ob%20Dravi%21"))

decodeURI("encodedURI")
decodeURIComponent("encodedURIComponent")
encodeURI("URIString")
encodeURIComponent("URIComponentString")

Tretja različica standarda ECMA-262, ki je vgrajena v IE5.5+ in NN6+ omogoča lažje prevajanje nizov v veljavne nize URI in je bolje, kot pa je bilo to možno doseči v prejšnjih različicah z uporabo funkcij escape() in unescape(). Namen teh dekodirnih funkcij je, sprememba katerega koli niza v nek zapis, ki se ga vidi kot URI (Uniform Resource Identifier). To so internetni naslovi ali sklicevanje na strežnikove scripte CGI. Medtem, ko alfanumerični znaki Latin1 gredo skozi proces dekodiranja nedotaknjeni, moramo uporabiti funkcije za dekodiranje pri nekaterih simbolih in drugih znakov unicode v obrazcu (šestnajstiške predstavitve številčnih znakov), skozi katere lahko Internet gre od enega mesta do drugega. Na primer znak za presledek, mora biti dekodiran v njegovo heksadecimalno verzijo: %20.

Morda je največja razlika med funkcijami encodeURI() in escape() (in njunima nasprotnicama decodeURI() in unescape()) ta, da bolj moderne različice ne dekodirajo velikih dolžin simbolov, ki so dovoljeni za znake URI, navezujoč se na sintakso priporočeno v RFC2396 (http://www.ietf.org/rfc/rfc2396.txt). In tako, naslednji znaki niso dekodirani preko encodeURI() funkcije:

; / ? : @ & = + $ , - _ . ! ~ * ‘ ( ) #

Funkciji encodeURI() in decodeURI() se uporabljata samo na celotnih URI. Aplikacijski URI so lahko relativni ali absolutni, toda ti dve funkciji sta posebno povezani tako, da simboli, ki so del protokola (://), iskalnega niza (? in =, na primer), in direktorijskih ločilcev (/) niso dekodirani. Funkcija decodeURI() bi naj delovala z URI, ki prispejo s strežnikov, kot lokacije strani, toda potrebno je biti pazljiv, ker nekateri strežniki CGI dekodirajo presledke v plus simbole (+), ki pa nato niso dekodirani v presledke funkcije JavaScript. Če URI, ki jih mora vaša skripta dekodirati vsebujejo simbole plus namesto presledkov, mora pognati vaš dekodiran URI skozi metodo zamenjevanja nizov, da boste lahko končali delo. Če dekodiramo URI nize, ki so bili kodirani s našim scriptom, potem uporabimo funkcijo za dekodiranje le na URI, ki so bili kodirani s ustrezno kodirno funkcijo (naši dekodirni funkciji). Ne poskušajte dekodirati URI ki je bil ustvarjen s pomočjo stare funkcijo escape(), ker komunikacija temelji na razlikujočih se navodilih. Razlika med URI in URI komponento je v tem, da URI komponenta vsebuje le en del URI, v bistvu ne vsebuje znaka za omejevanje. Na primer, če uporabimo funkcijo encodeURIComponent() nad celotnim URI, so skoraj vsi simboli kodirani v heksadecimalno verzijo - vklučujoč znake za omejevanje direktorijev. Zato bi naj uporabljali funkcijo za komponentno komunikacijo le na skoraj podobnih delih URI. Na primer, če sestavimo iskalen niz, ki ima par ime/vrednost, potem lahko uporabimo funkcijo encodeURIComponent() na vsakem delu posebej. Toda, če uporabimo to funkcijo nad parom, ki je že v obliki ime=vrednost, potem funkcija kodira enake simbole kot heksadecimalno ekvivalentne. Uporabite preizuševalec za eksperimentacijo na razlikah med dekodiranjem celotnega URI in komponente in med encode in escape URI niza. Na primer, primerjajte rezultate na naslednjih treh stavkih:

escape("http://www.sersmb.net/index.html?code=42")
encodeURI("http://www.sersmb.net/index.html?code=42")
encodeURIComponent("http://www.sersmb.net/index.html?code=42")

Ker je podan URI niz veljaven, kot je, funkcija encodeURI() ne povzroči nobenih sprememb. Poskušajte ob spremembi vrednosti iskalnega niza, v niz s presledkom, in opazujte kako se različne funkcije obnašajo nad tem znakom.

SERŠ Maribor : Strokovna gimnazija : 2004 : Rok Kožuh