Mis see tööriist on?
URL-i kodeerimine (protsentkodeering) asendab URL-is keelatud märgid protsendimärgiga, millele järgneb märgi baidiväärtus kuueteistkümnendsüsteemis — tühikust saab %20 ja märgist 你 saab %E4%BD%A0. Ilma selleta lõhuksid tühikud, &, ? ja mitte-ASCII tekst URL-i struktuuri või tõlgendaks server neid valesti.
Levinud on kaks vajadust ja see tööriist toetab mõlemat: väärtuse kodeerimine, mis läheb päringuparameetri sisse (komponendirežiim — kodeerib ka / ? & = märgid), ning terve URL-i kodeerimine, säilitades selle struktuuri (täisURL-i režiim — jätab :// ? & puutumata).
Üks huvitav ajalooline iseärasus: URL-i standardi (RFC 3986) järgi on tühik õigesti %20, kuid HTML-vormide esitamisel on tühikut traditsiooniliselt kodeeritud plussmärgina — seetõttu näedki looduses nii q=hello%20world kui ka q=hello+world ning vormiandmete dekodeerimisel tuleb + sageli eraldi käsitleda.
Miks seda kasutada?
- Ehita päringustringe turvaliselt — kasutaja sisestus märkidega &, = või tühikutega ei lõhu su URL-i.
- Dekodeeri pikad kodeeritud URL-id logidest, analüütikast või ümbersuunamistest, et näha, mida need tegelikult tähendavad.
- Korrektne UTF-8 käsitlus hiina keele, emotikonide ja muu mitte-ASCII teksti jaoks.
- Kaks režiimi, et sa kogemata ei kodeeriks terve URL-i : ja / märke.
- Tasuta, kohene, midagi ei laadita üles.
Kuidas kasutada
- Kleebi oma tekst või URL sisestusväljale.
- Vali režiim: "Komponent" päringuparameetrisse minevate väärtuste jaoks, "Täis-URL" tervete URL-ide jaoks.
- Klõpsa "Kodeeri" või "Dekodeeri".
- Kopeeri tulemus.
Näide
Sisend
https://example.com/search?q=hello world & 你好Tulemus
Komponendirežiim: https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%20%26%20%E4%BD%A0%E5%A5%BD
Täis-URL režiim: https://example.com/search?q=hello%20world%20&%20%E4%BD%A0%E5%A5%BDKomponendirežiim kodeerib ka struktuurimärgid; täis-URL režiim säilitab need.
Levinud kasutusjuhud
- Jagatava URL-i loomine, kus otsingusõna või filtri väärtus tuleb kasutaja sisestusest ja võib sisaldada tühikuid, & märki või muid erimärke.
- Pika jälgimis- või ümbersuunamis-URL-i dekodeerimine e-kirjast või reklaamkampaaniast, et näha tegelikku sihtkohta ja parameetreid enne klõpsamist.
- Selle vea otsimine, miks server ei loe päringuparameetrit õigesti — sageli on süüdi reserveeritud märk, mis oleks pidanud olema kodeeritud, aga ei olnud.
- Mitte-inglise keele (hiina, jaapani, araabia jne) väärtuse ettevalmistamine URL-i päringustringi jaoks.
encodeURIComponent vs encodeURI praktikas
Need vastavad otseselt tööriista kahele režiimile ja päris JavaScripti funktsioonidele, mida arendajad juba tunnevad: encodeURIComponent (komponendirežiim) kodeerib kõik peale väikese kogumi kodeerimata märkide, mistõttu see sobib turvaliselt igale üksikule väärtusele, mis lisatakse URL-i — seda kasutad päringuparameetri, tee osa või hash-fragmendi väärtuse jaoks. encodeURI (täisURL-i režiim) jätab URL-i struktuurimärgid (:, /, ?, #, &, =) puutumata, sest eeldab, et kodeerid tervet, juba struktureeritud URL-i, mitte toorväärtust — selle kasutamine ühe parameetri väärtuse peal jätaks kodeerimata & või = märgid, mida see väärtus võib sisaldada, ja see ongi kõige levinum viga vale režiimi valimisel.
Reserveeritud ja reserveerimata märgid
URL-i spetsifikatsioon (RFC 3986) jagab märgid kahte rühma: reserveerimata märgid (tähed, numbrid, - _ . ~) on alati turvalised ja neid ei kodeerita kunagi, samas kui reserveeritud märkidel (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) on URL-i struktuuris eriline tähendus ning need vajavad kodeerimist ainult siis, kui need esinevad andmetena, mitte struktuurse kirjavahemärgina. Just seetõttu need kaks režiimi eksisteerivadki — komponendirežiim kohtleb reserveeritud märke kaitstavate andmetena, täisURL-i režiim aga säilitatava struktuurina. Selle vahe mõistmine on kasulikum kui pähe õppida, millal mida kasutada, sest see selgitab, miks sama märk (nt &) on mõnikord kodeeritud ja mõnikord mitte, olenevalt sellest, mis rolli see konkreetses URL-is mängib.
Korduma kippuvad küsimused
Millal kasutada komponendirežiimi ja millal täisURL-i režiimi?
Komponendirežiimi (encodeURIComponent) kasuta ühe väärtuse kodeerimiseks, mis läheb päringuparameetri sisse — see kodeerib ka /, ?, & ja =, et need URL-i ei lõhuks. Täis-URL režiimi (encodeURI) kasuta terve URL-i kodeerimiseks — see säilitab struktuurimärgid, et URL jääks toimivaks.
Miks ilmus tühiku asemel %20, mitte +?
Mõlemad on eri kontekstides kehtivad. %20 on tühiku universaalne protsentkodeering; + tähendab tühikut ainult päringustringides, kus kasutatakse vanemat application/x-www-form-urlencoded vormingut. See tööriist kasutab %20, mis töötab kõikjal.
Miks dekodeerimine annab vea?
Sisend sisaldab vigast protsentjada, näiteks % ilma kahe järgneva kuueteistkümnendmärgita. See juhtub tihti, kui URL katkes pooleli või dekodeeriti kaks korda. Paranda või eemalda katkine % jada.
Mis on topeltkodeerimine?
Juba kodeeritud teksti kodeerimine: %20-st saab %2520, sest % ise kodeeritakse %25-ks. See on levinud viga — kui dekodeeritud tulemus sisaldab endiselt % koode, dekodeeri veel üks kord.
Kas see töötab hiina märkide ja emotikonidega?
Jah. Tekst kodeeritakse UTF-8 baitidena, nii et 你好 muutub kujuks %E4%BD%A0%E5%A5%BD ja dekodeerub täpselt tagasi — samamoodi nagu brauserid seda teevad.