URL-kodeerija: Veebis tasuta URL-i erilised märgid
Tasuta URL-i stringi põgenemise tööriist, et koheselt kodeerida erilisi märke. Teisendage tühikud, Unicode ja sümbolid protsendiga kodeeritud formaati. Ideaalne API-de, veebivormide ja rahvusvaheliste URL-ide jaoks. Proovige kohe!
URL-stringi põgenemine
Dokumentatsioon
URL-i kodeerimine: mis see on ja kuidas see toimib
URL-i kodeerimine ehk protsendikodeering on viis esitada veebiaadressis märke, kasutades ainult väikest hulka turvalisi ASCII-märke. See toimib nii, et ebaturvaline märk asendatakse %-märgi ja sellele järgnevate kahe kuueteistkümnendkohalise numbriga. See URL-i stringi varjamise tööriist kodeerib teksti samamoodi nagu JavaScripti sisseehitatud funktsioon encodeURIComponent.
Miks URL-id vajavad kodeerimist
URL-is tohib olla ainult piiratud hulk märke: tähed, numbrid ja mõned kirjavahemärgid. Tühikud, diakriitilised tähed, mitteladina tähestike märgid ning sellised sümbolid nagu & või = võivad kodeerimata kujul URL-i rikkuda või selle tähendust muuta. Näiteks lingis olev tühik võib põhjustada selle, et brauser või server loeb URL-i kaheks eraldi osaks. Protsendikodeering asendab need märgid koodiga, mida kõik brauserid ja serverid saavad ühtemoodi lugeda.
Märgid, mida see tööriist muutmata jätab
See tööriist ei muuda kunagi järgmisi märke. Need edastatakse muutmata kujul:
- Suur- ja väiketähed:
A–Z,a–z - Numbrid:
0–9 - Kirjavahemärgid
-._~!*'()
Kõik muud märgid kodeeritakse protsendikoodina, sealhulgas:
- Tühik ning kirjavahemärgid, nagu
:/?#[]@$&+,;= - Diakriitilised tähed ning kõik muud mitte-ASCII- ja Unicode-märgid
- Literaalne märk
%ise, millest saab alati%25, isegi kui see oli juba protsendikodeeringuga jada osa
Mõnes URL-i süntaksi üldjuhendis liigitatakse ! * ' ( ja ) koos teiste kirjavahemärkidega märkideks, mis võivad mõnes kontekstis vajada kodeerimist. See konkreetne tööriist neid ei kodeeri, sest järgib reeglistikku encodeURIComponent, mille kohaselt käsitletakse neid turvalistena.
Kuidas arvutada protsendikodeeringuga stringi (valem)
Tööriist kontrollib sisendi iga märki ükshaaval ja rakendab järgmist reeglit:
- Kui märk kuulub eespool loetletud muutmata jäetavate märkide hulka, jäetakse see muutmata.
- Muul juhul teisendatakse märk selle UTF-8 baidijadaks. Diakriitilised ladina tähed ning kreeka, kirillitsa ja araabia tähed kasutavad kahte baiti. Hiina, jaapani ja korea märgid kasutavad kolme baiti. Emotikonid kasutavad nelja baiti.
- Iga bait kirjutatakse kahekohalise kuueteistkümnendarvuna.
- Iga kuueteistkümnendpaari ette lisatakse
%. - Tulemused ühendatakse nende järjekorras, et moodustada kodeeritud string.
Näidisarvutus
Sisend: Jürgen & Björk
Töötlemine märgi kaupa:
| Märk | Tulemus |
|---|---|
J | J (muutmata) |
ü | %C3%BC (UTF-8 baidid 0xC3, 0xBC) |
rgen | rgen (muutmata) |
(tühik) | %20 |
& | %26 |
(tühik) | %20 |
Bj | Bj (muutmata) |
ö | %C3%B6 (UTF-8 baidid 0xC3, 0xB6) |
rk | rk (muutmata) |
Väljund: J%C3%BCrgen%20%26%20Bj%C3%B6rk
Teine näide näitab muutmata jäetavate märkide hulga toimimist. Stringi -_.!~*'() kodeerimisel saadakse -_.!~*'(), täpselt sama tekst, sest kõik selle märgid kuuluvad reserveerimata märkide hulka. Stringi 100% kodeerimisel saadakse 100%25, sest märk % ise ei ole turvaline märk.
Protsendikodeeringuga stringi dekodeerimine
Dekodeerimine pöörab protsessi ümber: iga jada %XX loetakse kuueteistkümnendbaidina, baidid rühmitatakse tagasi nende algseks UTF-8 märgiks ning märk asendab jada. Näiteks dekodeeritakse %C3%BC tagasi märgiks ü ja %20 dekodeeritakse tagasi tühikuks. See tööriist ainult kodeerib; protsessi ümberpööramiseks on vaja eraldi dekoodrit.
Levinud kasutusalad
Protsendikodeeringut kasutatakse alati, kui inimese sisestatud tekst, mitte programmeerija kirjutatud tekst, tuleb muuta URL-i osaks:
- Otsingukastid, mis lisavad otsingutermini aadressiribale, näiteks
?q=shoes%20%26%20bags - Päringuparameetrid, mis sisaldavad nimesid, aadresse või muid kasutajaandmeid
- Lingid lehtedele, mille pealkirjades kasutatakse diakriitilisi tähti või mitteladina kirjasüsteeme
- API-päringud, milles edastatakse tunnuseid või identifikaatoreid URL-i osana
Koodinäited
1// JavaScript
2encodeURIComponent("Jürgen & Björk");
3// "J%C3%BCrgen%20%26%20Bj%C3%B6rk"
41# Python
2import urllib.parse
3urllib.parse.quote("Jürgen & Björk", safe="!*'()")
4# 'J%C3%BCrgen%20%26%20Bj%C3%B6rk'
5Pythoni quote jätab tähed, numbrid ning märgid - . _ ~ alati muutmata. Viis täiendavat
märki ! * ' ( ) tuleb selle tööriistaga sobitamiseks loetleda parameetris safe. Ilma
nendeta tagastab quote nende asemel väärtused %21 %2A %27 %28 %29.
Ajalugu
Idee kodeerida URL-is ebaturvalised märgid pärineb RFC-st 1738 aastast 1994, mis oli üks esimesi URL-i vormingut määratlenud dokumente. Aastal 2005 avaldatud RFC 3986 ajakohastas reegleid ja määratles ametlikult „reserveerimata” märkide hulga, mida ei ole kunagi vaja kodeerida. encodeURIComponent, see JavaScripti funktsioon, millel tööriist põhineb, järgib RFC-st 3986 veidi laiemat reserveerimata märkide hulka: see jätab kodeerimata ka märgid ! * ' ( ja ), järgides URI spetsifikatsiooni varasemat versiooni.
Korduma kippuvad küsimused
Mis vahe on URL-i kodeerimisel ja URL-i varjamisel?
Need tähendavad sama. Mõlemad terminid kirjeldavad protsendikodeeringut, mille puhul märk asendatakse %-märgi ja sellele järgnevate kahe kuueteistkümnendkohalise numbriga.
Miks jäävad !, *, ', ( ja ) selles tööriistas muutmata?
See tööriist kasutab encodeURIComponent-i, mis käsitleb neid viit märki turvalistena ja jätab need täpselt sisestatud kujule. Teised kodeerimisfunktsioonid ja mõned serverid võivad siiski eeldada, et need märgid kodeeritakse, seega tuleb probleemi korral sihtsüsteemi kontrollida.
Mis vahe on tühiku puhul märkidel %20 ja +?
Mõlemad tähistavad tühikut. %20 on tühiku üldine protsendikodeering. Märki + kasutatakse erandina ainult application/x-www-form-urlencoded-andmetes ehk HTML-vormide saadetavates andmetes, mitte selles tööriistas.
Kas see tööriist dekodeerib juba kodeeritud teksti?
Ei. See ainult kodeerib. Kui sisend sisaldab juba märki %, käsitletakse seda % literaalse märgina ja väljundis saab sellest %25, mitte ei jäeta seda muutmata.
Kuidas käsitletakse mitteladina märke, näiteks hiina või araabia teksti?
Iga märk teisendatakse esmalt UTF-8 baidijadaks ja seejärel kodeeritakse iga bait protsendikoodina. Hiina märk kasutab kolme baiti, seega annab see kolm %XX-rühma. Araabia täht kasutab kahte baiti, seega annab see kaks rühma.
Millal keeldub tööriist teksti kodeerimast? Ainult siis, kui tekst sisaldab surrogaadipaari üht poolt. Surrogaadipaar on kaheosaline kood, millega salvestatakse märki üle U+FFFF, näiteks emotikoni. Üksik pool ei moodusta kehtivat UTF-8-kuju, seega kuvab tööriist tulemuse asemel vea. Tavalisel sisestamisel seda ei teki; enamasti pärineb see kärbitud kopeerimisest või katkisest lingist.
Kas kodeerida tuleks kogu URL või ainult selle osa?
Kodeerida tuleb ainult kasutajaandmeid sisaldavad osad, näiteks päringu väärtused või teelõigud, mitte URL-i struktuuri moodustavad osad, nagu https:// ja domeeninimi. Kogu URL-i kodeerimine komponendikodeerijaga muudaks protsendikoodideks ka selle märgid :, / ja ? ning rikuks aadressi.