URL kodeerija ja dekodeerija

Acrafto Team Arendajad
Uuendatud
Kodeeri kui

Ühe päringuväärtuse või teelõigu jaoks. Kodeerib kõik peale tähtede, numbrite ja märkide - _ . ! ~ * ' ( ), nagu encodeURIComponent.

Tulemus

Kõik toimub teie brauseris ja midagi, mida kleebite, ei laadita üles. See on oluline, sest URL-id sisaldavad sageli tokeneid ja sessiooni ID-sid.

URL encode ja decode veebis kirjutamise ajal: tööriist muudab tühikud, täpitähed ja sümbolid nagu & või ? protsentkodeeritud järjenditeks, näiteks %20, ning teisendab need tagasi loetavaks tekstiks. Teine sakk on URL-i parser. See jagab iga aadressi protokolliks, hostiks, teeks ja päringuparameetriteks, mida saate muuta, välja lülitada või jälgimismärgenditest puhastada, ning kirjutab õigesti kodeeritud URL-i teie eest tagasi. Kõik toimub teie brauseris.

Kuidas URL-i kodeerida ja dekodeerida (URL encode ja decode)

  1. Sisestage või kleepige tekst Kodeeri / dekodeeri sakil olevasse välja. Tulemus uueneb iga klahvivajutusega.
  2. Valige Suund. Kodeeri muudab teksti URL-is kasutamiseks turvaliseks, Dekodeeri teisendab caf%C3%A9%20au%20lait tagasi kujule café au lait. Kui kleebite tühja välja teksti, milles on järjendeid nagu %20, lülitub tööriist ise režiimile Dekodeeri (Kodeeri hoopis lülitab tagasi). Kodeerimist vajav tavatekst, mis kleebitakse režiimis Dekodeeri, lülitab režiimi samamoodi kodeerimisele, nupuga Dekodeeri hoopis.
  3. Kodeerimisel valige väljal Kodeeri kui, mis tekstiga on tegu (vt järgmist osa). Vaikimisi valitud Parameetri väärtus sobib ühe päringuväärtuse jaoks.
  4. Kopeeri paneb tulemuse lõikelauale. Vaheta tõstab tulemuse sisendisse ja pöörab suuna ümber. See on kiire edasi-tagasi kontroll: äsja kodeeritud teksti dekodeerimine peab andma tagasi teie algse teksti.

Iga märk, mida tööriist muutis, on tulemuses esile tõstetud. Hiirega märgi kohale minnes näete märki, selle Unicode’i koodpunkti ja baite, näiteks é U+00E9 %C3%A9. Väljade all on Märgid, UTF-8 baiti ja Kodeeritud märke (või Dekodeeritud märke) arv. Proovi näitega laadib lause Hind: 50 % soodsam, õunakook & kohv? Jah, tänan!, milles on 48 märki, aga 50 UTF-8 baiti, sest iga täpitäht (siin õ ja ä) võtab kaks baiti.

Kodeerimisel kodeerib Iga rida eraldi iga rea eraldi ja jätab reavahetused alles, mis sobib väärtuste või linkide loendi jaoks. Ilma selleta kodeeritakse ka reavahetus ja sellest saab %0A. Kui tekst on URL koos parameetritega, pakub tööriist nuppu Jaga osadeks, mis avab aadressi parseri sakil.

URL-i parameetri, terve URL-i või vormiandmete kodeerimine

Kõiki märke ei tule igal pool kodeerida. Kaldkriips eraldab teel kaustu, aga parameetri väärtuses on see tavaline andmemärk, seega sõltub õige tulemus sellest, mida kodeerite. Kodeeri kui pakub nelja režiimi:

  • Parameetri väärtus töötab nagu JavaScripti encodeURIComponent ja sobib ühe päringuväärtuse või teelõigu jaoks. See kodeerib kõik peale tähtede, numbrite ja märkide - _ . ! ~ * ' ( ), nii et väärtuses olev &, =, / või ? ei saa URL-i katki teha. Teksti café & crème kodeerimine annab caf%C3%A9%20%26%20cr%C3%A8me, mida saab kohe q= järele panna.
  • Terve URL on mõeldud tervele aadressile, mida tuleb vaid korda teha. See kodeerib tühikud, mitte-ASCII märgid, juhtmärgid, tagurpidi ülakoma ja " < > \ ^ { | }, ning jätab alles kõik, mis annab URL-ile struktuuri: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Nii saab aadressist https://example.com/search?q=café au lait&lang=fr aadress https://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Juba kodeeritud järjendid jäävad samaks ja üksik % muutub %25-ks. Selles erineb see JavaScripti encodeURI-st, mis muudab olemasoleva %20 kujule %2520 ja kodeerib IPv6 aadressi, näiteks http://[2001:db8::1]:8080/, nurksulud.
  • Vormiandmed järgib vormingut application/x-www-form-urlencoded (inglise keeles), mida toodavad HTML-vormid ja URLSearchParams. Tühikust saab + ja kodeerimata jäävad ainult tähed, numbrid ja * - . _, seega kodeeritakse ka ! ' ( ) ~.
  • Range RFC 3986 jätab kodeerimata ainult RFC 3986 (inglise keeles) kodeerimata märgid: tähed, numbrid ja - . _ ~. OAuth 1.0 (RFC 5849) ja AWS Signature Version 4 nõuavad täpselt seda vormi, sest allkiri klapib ainult siis, kui mõlemad pooled kodeerivad ! või * ühtmoodi.

Samad märgid igas režiimis:

MärkParameetri väärtusTerve URLVormiandmedRange RFC 3986
tühik%20%20+%20
&%26&%26%26
/%2F/%2F%2F
+%2B+%2B%2B
~~~%7E~
!!!%21%21
****%2A
é%C3%A9%C3%A9%C3%A9%C3%A9

Tekst kodeeritakse alati UTF-8-s ja kuueteistkümnendnumbrid on alati suurtähtedega. Kui sisend sisaldab juba järjendeid nagu %20, ütleb märkus seda ja pakub nuppu Dekodeeri hoopis, et te ei kodeeriks teksti kogemata kaks korda.

JSON-i edastamiseks päringuparameetris minimeerige see JSON-i vormindajas ja kodeerige režiimis Parameetri väärtus: {"id":7,"tags":["a","b"]} muutub kujule %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. See töötab ka vastupidi: dekodeerige parameeter siin ja vormindage see seal.

URL decode probleemid: plussmärgid, %2520 ja katkised järjendid

Dekodeerimine töötab tavaliselt probleemideta, kuid neli olukorda ajavad inimesi segadusse. Tööriist käsitleb neid kõiki, selle asemel et veaga peatuda:

  • Plussmärk tähistab vormiandmetes ja enamikus päringustringides tühikut. Dekodeeri + tühikuna on vaikimisi sees, seega dekodeeritakse caf%C3%A9+au+lait kujule café au lait. Terves URL-is loetakse tühikuks ainult ? järel olevad plussmärgid, sest teel on pluss tavaline märk. Lülitage valik välja, kui pluss on mõeldud otseses tähenduses. Plussmärk, mis kodeeriti kujul %2B, jääb alati plussmärgiks.
  • Topeltkodeerimine juhtub siis, kui kaks koodikihti kodeerivad sama väärtuse, mille eest hoiatab ka RFC 3986. Iga % muutub %25-ks, nii et tühik muutub %20-st %2520-ks. Kui dekodeeritud tulemus sisaldab endiselt järjendeid nagu %20, ütleb tööriist, et tekst oli ilmselt kodeeritud kaks korda, ja pakub nuppu Dekodeeri uuesti.
  • Vigane järjend, %, mille järel ei ole kahte kuueteistkümnendnumbrit, nagu 100% või %G1, paneb JavaScripti decodeURIComponent-i viskama URIError’i. Siin jäetakse sellised järjendid muutmata, märgitakse punasega ja loetakse üle ning ülejäänud tekst dekodeeritakse.
  • Vanad Latin-1 lingid pärinevad ajast enne UTF-8, mil mõned saidid kodeerisid é ühe baidina %E9. caf%E9 ei ole kehtiv UTF-8, seega decodeURIComponent ebaõnnestub ja Pythoni unquote tagastab caf ning asendusmärgi U+FFFD. Tööriist loeb sellised baidid Windows-1252 kodeeringus, dekodeerib caf%E9 kujule café ja lisab sellest märkuse.

Dekodeeritud tekstis olevad juhtmärgid, näiteks tabulaator või nullbait, kuvatakse nähtavate sümbolitena nagu ␉ ja ␀, kuid Kopeeri kopeerib tegeliku teksti.

URL-i parser: jagage URL osadeks ja muutke päringuparameetreid

Kleepige aadress sakil Parsi ja muuda URL-i väljale URL ja see jagatakse osadeks Protokoll, Host, Port, Tee ja Fragment, lisaks Kasutajanimi ja Parool, kui URL neid sisaldab. Väärtused kuvatakse dekodeerituna, seega on see sakk ka kiireim viis URL-i parameetrite dekodeerimiseks: loete talvised säärikud asemel talvised+s%C3%A4%C3%A4rikud. Muutmine töötab mõlemas suunas, nagu brauseri aadressiriba ja Postmani parameetritabel. Muutke välja ja URL kirjutatakse kohe ümber, õigesti kodeerituna, muutke URL-i ja kõik osad loetakse uuesti. Osad, mida te ei puutu, jäävad täpselt samaks, märk märgi haaval.

Tabel Päringuparameetrid loetleb iga parameetri koos väljadega Nimi ja Väärtus. Eemaldage linnuke valikult Lisa URL-i, et jätta parameeter välja ilma seda kustutamata, mis aitab leida parameetrit, mis päringu katki teeb. Lisa parameeter, Eemalda parameeter ja Sorteeri A-Z teevad seda, mida nimi ütleb. Korduvad nimed nagu tag=a&tag=b ja väärtuseta nimed nagu ?debug säilivad. Tühikud parameetrites määrab, kas tühikud kirjutatakse %20 või + kujul, vaikimisi järgib see kleebitud URL-i.

Sisselogimis- ja maksalingid kannavad sageli parameetris teist URL-i, kodeeritult nii, et selle ? ja & ei sega välimisi:

https://auth.example.com/authorize?client_id=abc&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Ftab%3D2

Väärtus, mis on ise URL, tavaliselt väljadel redirect_uri, return, url või next, saab nupu Muuda sees olevat URL-i. Sisemine aadress https://app.example.com/callback?tab=2 avaneb eraldi tasemena oma osade ja parameetritega, leivapuru (Peamine URL › redirect_uri) viib tagasi ning iga muudatus kodeeritakse tagasi välimisse URL-i. Kopeeri peamine URL kopeerib tulemuse. See töötab mitu taset sügavale.

Kui osa pärast # näeb välja nagu parameetrid, nagu #access_token=...&state=... OAuthi implicit flow’s või #/search?q=shoes ühelehelise rakenduse marsruutides, loetleb neid ka teine tabel Fragmendi parameetrid.

Parser juhib tähelepanu ka probleemidele: URL ilma protokollita, mida brauserid käsitlevad suhtelise lingina; port väljaspool vahemikku 0 kuni 65535; ning märgid, mida tuleb kodeerida, nagu tühikud, täpitähed, " või <, mille parandab ühe sammuga Kodeeri need. Aadressita tekst, nagu a=1&b=2, loetakse päringustringina. Rahvusvahelise domeeninime (inglise keeles) puhul näitab tööriist Punycode’i kuju, mida DNS ja brauserid kasutavad, nii et münchen.de muutub xn--mnchen-3ya.de-ks ning xn-- algusega domeen saab loetava kuju.

Kopeeri URL kopeerib valmis aadressi, Ava avab selle uuel sakil (ainult http ja https lingid) ning Kopeeri JSON-ina annab parameetrid JSON-objektina, korduvad nimed kogutud massiivi.

UTM-i ja muude jälgimisparameetrite eemaldamine URL-ist

Uudiskirjade, reklaamide ja sotsiaalvõrgustike lingid kannavad parameetreid, mis ütlevad saidile vaid seda, kust külastaja tuli. UTM-i parameetrid (inglise keeles) utm_source, utm_medium, utm_campaign, utm_term ja utm_content pärinevad Urchinist, Google Analyticsi eelkäijast. Klikiidentifikaatorid nagu fbclid (Facebook), gclid (Google Ads) ja msclkid (Microsoft Advertising) lisavad platvormid ise.

Parser märgib need sildiga jälgimine ja Eemalda jälgimine (n) kustutab need kõik korraga. Lisaks igale utm_* parameetrile tunneb see ära üle 20 muu, näiteks ttclid (TikTok), mc_cid (Mailchimp) ja _hsenc (HubSpot). Parameetrid, mida leht vajab, jäävad paika: nupuga Proovi näitega laaditud poelingis eemaldab Eemalda jälgimine (4) parameetrid utm_source, utm_medium, utm_campaign ja fbclid ning jätab alles q, size, return ja fragmendi #reviews.

QR-koodi minevat linki tasub siin enne puhastada. Ilma jälgimisparameetriteta on see lühem ja lühem link annab hõredama koodi, mida on lihtsam skannida.

Mis on protsentkodeering ja kuidas märgid muutuvad %XX-ks

Protsentkodeering (inglise keeles), mida nimetatakse ka URL-i kodeerimiseks, kirjutab märgi kujul % ja sellele järgnevad kaks kuueteistkümnendnumbrit. URL võib sisaldada ainult piiratud hulka ASCII märke ja mõnel neist on ülesanne: ? alustab päringut, & eraldab parameetreid, # alustab fragmenti. RFC 3986 nimetab neid reserveeritud märkideks (: / ? # [ ] @ ja ! $ & ' ( ) * + , ; =). Tähed, numbrid ja - . _ ~ on reserveerimata ega vaja kunagi kodeerimist. Kõik muu ja iga reserveeritud märk, mida kasutatakse tavaandmena, kodeeritakse.

Väljaspool ASCII-t olevad märgid muudetakse kõigepealt UTF-8 baitideks ja iga bait saab oma %XX:

  • é on U+00E9, mille UTF-8 salvestab kahe baidina C3 A9, seega saab sellest %C3%A9.
  • € on U+20AC, kolm baiti: %E2%82%AC.
  • Emoji, näiteks U+1F600 (irvitav nägu), võtab neli baiti: %F0%9F%98%80.

%c3%a9 ja %C3%A9 tähendavad sama, kuid RFC 3986 soovitab suurtähti, mida tööriist ka kirjutab. Protsentkodeeringu tabel märkidest, mida kohtate kõige sagedamini:

MärkKodeeritudMärkKodeeritud
tühik%20+%2B
!%21,%2C
"%22/%2F
#%23:%3A
$%24;%3B
%%25=%3D
&%26?%3F
'%27@%40
(%28[%5B
)%29]%5D
*%2Areavahetus%0A

URL-i kodeerimine JavaScriptis, Pythonis ja PHP-s

Igal keelel on selleks funktsioonid ning need erinevad peamiselt selle poolest, kuidas nad käsitlevad tühikuid, kaldkriipse ja märke ! ' ( ) * ~.

JavaScriptis on väärtuse jaoks encodeURIComponent (inglise keeles), terve aadressi jaoks encodeURI ja vormikodeeringu jaoks URLSearchParams:

encodeURIComponent("café & crème")                     // "caf%C3%A9%20%26%20cr%C3%A8me"
encodeURI("https://example.com/a b?q=café")            // "https://example.com/a%20b?q=caf%C3%A9"
new URLSearchParams({ q: "café & crème" }).toString()  // "q=caf%C3%A9+%26+cr%C3%A8me"
decodeURIComponent("caf%C3%A9")                        // "café"

decodeURIComponent ei muuda + tühikuks ja viskab vigase järjendi, näiteks 100%, korral URIError’i.

Pythonis asuvad funktsioonid moodulis urllib.parse. quote jätab / vaikimisi alles (safe='/') ja kodeerib muidu kõik peale RFC 3986 kodeerimata märkide. quote_plus kirjutab tühikud + kujul ja kodeerib ka /:

from urllib.parse import quote, quote_plus, urlencode, unquote_plus

quote("café & crème/brûlée")       # 'caf%C3%A9%20%26%20cr%C3%A8me/br%C3%BBl%C3%A9e'
quote("a b/c", safe="")            # 'a%20b%2Fc'
quote_plus("café & crème/brûlée")  # 'caf%C3%A9+%26+cr%C3%A8me%2Fbr%C3%BBl%C3%A9e'
urlencode({"q": "café & crème", "page": 2})  # 'q=caf%C3%A9+%26+cr%C3%A8me&page=2'
unquote_plus("caf%C3%A9+au+lait")  # 'café au lait'

PHP-s kodeerib urlencode nagu HTML-vorm ja kirjutab tühiku + kujul, rawurlencode aga järgib RFC 3986 ja kirjutab %20:

urlencode("café & crème");     // "caf%C3%A9+%26+cr%C3%A8me"
rawurlencode("café & crème");  // "caf%C3%A9%20%26%20cr%C3%A8me"

rawurlencode annab sama tulemuse nagu Range RFC 3986. urlencode vastab režiimile Vormiandmed, välja arvatud *, mille see kodeerib kujul %2A.

Korduma kippuvad küsimused

Kas tühik tuleks kodeerida %20 või + kujul?

%20 töötab URL-is igal pool. + tähendab tühikut ainult päringustringis ja vormiandmetes, mida HTML-vormid saadavad. Teel on + tavaline plussmärk, seega /a+b jääb /a+b. Kui päringuväärtus vajab päris plussmärki, kirjutage see %2B. Tööriistas kirjutab Vormiandmed tühikud + kujul ja ülejäänud kolm režiimi %20 kujul.

Mida tähendavad %20, %2F ja %3D URL-is?

Need on kodeeritud märgid: %20 on tühik, %2F kaldkriips ja %3D võrdusmärk. Teised, mida sageli näete, on %26 (&), %3F (?), %3A (:), %2C (koma) ja %27 (apostroof). Need kaks numbrit on märgi kood kuueteistkümnendsüsteemis. Täpitähed ja muud mitte-ASCII märgid võtavad kaks kuni neli sellist paari, näiteks %C3%A9 märgi é jaoks. Kleepige kogu sõne dekodeerijasse, et seda lugeda.

Mis vahe on encodeURI ja encodeURIComponent vahel?

encodeURI on mõeldud tervele aadressile ja jätab URL-i struktuuri andvad märgid, näiteks : / ? # & =, rahule. encodeURIComponent on mõeldud ühele osale, parameetri väärtusele või teelõigule, ja kodeerib needki märgid, seega muutub https://example.com/?a=1&b=2 kujule https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. Selles tööriistas vastab Parameetri väärtus funktsioonile encodeURIComponent ja Terve URL on nagu encodeURI, kuid jätab olemasolevad järjendid nagu %20 alles, selle asemel et muuta need %2520-ks.

Kuidas eemaldada URL-ist UTM-i parameetrid?

Kleepige link sakile Parsi ja muuda URL-i ja vajutage Eemalda jälgimine (n). See kustutab korraga kõik utm_* sildid ja klikiidentifikaatorid nagu fbclid ja gclid. Seejärel vajutage Kopeeri URL. Kui soovite eemaldada vaid mõned, kasutage nuppu Eemalda parameeter ridadel, mida te ei soovi.

Kas URL-i kodeerimine on sama mis krüpteerimine või Base64?

Ei. URL-i kodeerimine ei peida midagi: igaüks saab caf%C3%A9 tagasi dekodeerida kujule café, seega ei kaitse see kunagi parooli ega tokenit. See teeb märgid vaid aadressis kasutamiseks turvaliseks. Base64 on teistsugune kodeering, mis muudab mis tahes andmed, sealhulgas binaarfailid, 64 märgist koosnevaks sõneks. Base64 sõne URL-is vajab ikkagi märkide +, / ja = kodeerimist, kui te ei kasuta URL-turvalist varianti, mida Base64 kodeerija ja dekodeerija oskab luua.

Kas minu kleebitud URL-e laaditakse üles või salvestatakse?

Ei. Kodeerimine, dekodeerimine ja parsimine toimuvad teie brauseris ning midagi, mida kleebite, ei saadeta serverisse. See on oluline, sest URL-id kannavad sageli juurdepääsutokeneid, sessiooni ID-sid või parooli lähtestamise koode. Brauser jätab meelde ainult valitud sakki ja valikud, mitte kunagi tekste. Ainus asi, mis aadressi laadib, on Ava, mis avab selle uuel sakil täpselt nagu lingil klõpsamine.

Rohkem tööriistu programmeerijatele on kategoorias Arendajad ja tööriistad, mis teisendavad ühe vormingu teiseks, on koondatud kategooriasse Konverterid. Et leida, mille poolest kaks pikka URL-i erinevad, näiteks töötav ja ebaõnnestuv API-päring, kleepige need teksti võrdlemise tööriista ja võrrelge märkide kaupa.

Hindaksin, kui jagaksid neid lehti sõpradega, salvestaksid järjehoidjatesse või lingiks neid. Aitäh! 🙏