Codificare URL
Codifică textul care trebuie să intre într-o adresă web sau transformă o adresă codificată înapoi în text lizibil.
0 caractere · 0 octeți
Rezultat
Ca o singură componentă, sunt codificate și barele oblice și semnele întrebării. Fără bifă, structura adresei se păstrează și sunt codificate doar caracterele nepermise.
Cum funcționează
Adresele web pot conține doar un set limitat de caractere. Orice altceva se scrie ca semnul procent urmat de valoarea caracterului în hexazecimal, motiv pentru care un spațiu devine %20.
Diferența dintre cele două moduri este ce socotești structură. Codificarea unei singure componente codifică și barele oblice, semnele întrebării și semnele egal, pentru că altfel ar fi citite ca părți ale adresei.
Codificarea întregii adrese lasă aceste caractere neatinse, ca structura să rămână întreagă. Folosește acest mod pentru o adresă gata făcută care conține doar câteva caractere ce trebuie codificate.
Dacă alegi modul greșit pentru un parametru, destinatarul poate citi o valoare ca pe mai multe. O valoare care vine după un semn egal ar trebui aproape întotdeauna codificată ca o singură componentă.
Semnul plus este o capcană: în partea de interogare a unei adrese înseamnă din motive istorice un spațiu, în timp ce în cale înseamnă chiar plus.
Funcțiile din spatele modurilor
Modul pentru o singură componentă folosește funcțiile JavaScript encodeURIComponent și decodeURIComponent, iar modul pentru toată adresa encodeURI și decodeURI, toate patru definite în standardul ECMAScript. Fiecare caracter care trebuie codificat este transformat mai întâi în UTF-8, iar fiecare octet este scris ca semnul procent urmat de două cifre hexazecimale. Ca o singură componentă, plăcintă & ceai devine deci pl%C4%83cint%C4%83%20%26%20ceai. Ca adresă întreagă, ampersandul rămâne: pl%C4%83cint%C4%83%20&%20ceai. Un caracter care nu poate fi scris în UTF-8, de exemplu o jumătate singură dintr-o pereche surogat rămasă după o copiere stricată, dă un mesaj de eroare în loc de rezultat.
Caractere care nu sunt codificate niciodată
ECMAScript lasă necodificate în ambele moduri literele A–Z și a–z, cifrele, liniuța de subliniere, cratima, punctul, semnul exclamării, tilda, asteriscul, apostroful și parantezele. RFC 3986 socotește nerezervate doar cratima, punctul, liniuța de subliniere și tilda; semnul exclamării, apostroful, parantezele și asteriscul fac parte din delimitatorii rezervați și pot avea un sens în unele adrese.
Modul pentru toată adresa lasă în plus neatinse punctul și virgula, bara oblică, semnul întrebării, două puncte, a-rond, ampersandul, semnul egal, plusul, dolarul, virgula și diezul. Parantezele drepte sunt în schimb codificate, așa că o adresă IPv6 dintr-un URL, ca http://[::1]:8080/, devine http://%5B::1%5D:8080/.
Semnul plus și formularele
Formularele sunt codificate ca application/x-www-form-urlencoded, unde URL Standard de la WHATWG scrie spațiul ca plus și codifică în plus semnul exclamării, apostroful, parantezele și tilda. Instrumentul scrie întotdeauna %20, iar decodificarea nu transformă plusul în spațiu: a+b rămâne a+b. Dacă textul vine dintr-un formular, înlocuiește mai întâi semnele plus cu spații.
Erori la decodificare
Decodificarea cere UTF-8 valid. %E3, care este ă în vechea codificare ISO 8859-2, dă mesajul de eroare, în timp ce %C4%83 dă ă. Un semn procent care nu este urmat de două cifre hexazecimale, ca în a%zz, este și el o eroare. În modul pentru toată adresa, delimitatorii codificați sunt lăsați neatinși: a%2Fb rămâne a%2Fb, pentru că o bară oblică decodificată ar schimba structura adresei.