URL encoder og dekoder

Acrafto Team Udviklere
Opdateret
Kod som

Til én forespørgselsværdi eller ét stisegment. Koder alt undtagen bogstaver, tal og - _ . ! ~ * ' ( ), ligesom encodeURIComponent.

Resultat

Alt kører i din browser, og intet af det, du indsætter, bliver uploadet. Det er vigtigt, fordi URL-adresser ofte indeholder tokens og sessions-id'er.

URL encode og decode tekst online, mens du skriver: værktøjet laver mellemrum, bogstaver med accenter og tegn som & eller ? om til procentkodede sekvenser som %20 og laver dem om til læselig tekst igen. Den anden fane er en URL-parser. Den deler en hvilken som helst adresse op i protokol, værtsnavn, sti og forespørgselsparametre, som du kan redigere, slå fra eller rense for sporingstags, og den skriver den korrekt kodede URL tilbage til dig. Alt sker i din browser.

Sådan URL encoder og decoder du tekst

  1. Skriv eller indsæt i feltet på fanen Kod / Afkod. Resultat opdateres ved hvert tastetryk.
  2. Vælg Retning. Kod gør tekst sikker at bruge i en URL, Afkod laver caf%C3%A9%20au%20lait om til café au lait igen. Indsæt tekst med sekvenser som %20 i det tomme felt, og værktøjet skifter selv til Afkod (Kod i stedet skifter tilbage). Indsætter du omvendt almindelig tekst, der skal kodes, i tilstanden Afkod, skifter værktøjet på samme måde til Kod, og her tilbyder Afkod i stedet at skifte tilbage.
  3. Når du koder, vælger du under Kod som, hvad teksten er (se næste afsnit). Standarden, Parameterværdi, passer til en enkelt forespørgselsværdi.
  4. Kopiér lægger resultatet på udklipsholderen. Byt flytter resultatet over i inputfeltet og vender retningen. Det er en hurtig tur/retur-test: når du afkoder det, du lige har kodet, skal du få din oprindelige tekst tilbage.

Hvert tegn, som værktøjet har ændret, er fremhævet i resultatet. Hold musen over et tegn for at se tegnet, dets Unicode-kodepunkt og dets bytes, for eksempel é U+00E9 %C3%A9. Under felterne ser du antallet af Tegn, UTF-8-bytes og Kodede tegn (eller Afkodede tegn). Prøv et eksempel indlæser sætningen Pris: 50 % rabat på blåbærtærte & grød? Ja!, som har 43 tegn, men 48 UTF-8-bytes, fordi hvert af bogstaverne æ, ø og å fylder to bytes.

Når du koder, behandler Hver linje for sig hver linje for sig og bevarer linjeskiftene, hvilket passer til en liste med værdier eller links. Uden den bliver et linjeskift også kodet og til %0A. Når teksten er en URL med parametre, tilbyder værktøjet Del den op i dele, som åbner adressen i parser-fanen.

Kod en URL-parameter, en hel URL eller formulardata

Ikke alle tegn skal kodes overalt. En skråstreg adskiller mapper i en sti, men er helt almindelige data inde i en parameterværdi, så det rigtige resultat afhænger af, hvad du koder. Kod som har fire tilstande:

  • Parameterværdi virker som JavaScripts encodeURIComponent og passer til én forespørgselsværdi eller ét stisegment. Den koder alt undtagen bogstaver, tal og - _ . ! ~ * ' ( ), så et &, =, / eller ? inde i værdien ikke kan ødelægge URL’en. Koder du café & crème, får du caf%C3%A9%20%26%20cr%C3%A8me, klar til at stå efter q=.
  • Hel URL er til en komplet adresse, der bare skal ryddes op. Den koder mellemrum, tegn uden for ASCII, kontroltegn, backtick og " < > \ ^ { | }, og bevarer alt, der giver en URL dens struktur: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Så https://example.com/search?q=café au lait&lang=fr bliver til https://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Sekvenser, der allerede er kodet, forbliver, som de er, og et enkeltstående % bliver til %25. Her adskiller den sig fra JavaScripts encodeURI, som laver et eksisterende %20 om til %2520 og koder klammerne i en IPv6-adresse som http://[2001:db8::1]:8080/.
  • Formulardata følger formatet application/x-www-form-urlencoded (på engelsk), som HTML-formularer og URLSearchParams producerer. Et mellemrum bliver til +, og kun bogstaver, tal og * - . _ forbliver ukodede, så ! ' ( ) ~ bliver også kodet.
  • Streng RFC 3986 lader kun de ureserverede tegn i RFC 3986 (på engelsk) stå ukodede: bogstaver, tal og - . _ ~. OAuth 1.0 (RFC 5849) og AWS Signature Version 4 kræver netop denne form, fordi en signatur kun passer, når begge sider koder ! eller * på samme måde.

De samme tegn i hver tilstand:

TegnParameterværdiHel URLFormulardataStreng RFC 3986
mellemrum%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 bliver altid kodet som UTF-8, og hex-cifrene er altid med store bogstaver. Hvis input allerede indeholder sekvenser som %20, siger en note det og tilbyder Afkod i stedet, så du ikke kommer til at kode teksten to gange.

Skal du sende JSON i en forespørgselsparameter, så minificér den i JSON-formatteren og kod den som Parameterværdi: {"id":7,"tags":["a","b"]} bliver til %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Det virker også den anden vej: afkod parameteren her og formatér den der.

URL decode-problemer: plustegn, %2520 og ødelagte sekvenser

Afkodning virker som regel bare, men fire situationer driller. Værktøjet håndterer dem alle i stedet for at stoppe med en fejl:

  • Et plustegn står for et mellemrum i formulardata og de fleste forespørgselsstrenge. Afkod + som mellemrum er slået til som standard, så caf%C3%A9+au+lait afkodes til café au lait. I en hel URL tæller kun plustegnene efter ? som mellemrum, fordi et plus i en sti er et almindeligt tegn. Slå valgmuligheden fra, når et plustegn er ment bogstaveligt. Et plus, der er kodet som %2B, forbliver altid et plustegn.
  • Dobbeltkodning sker, når to lag kode hver koder den samme værdi, hvilket RFC 3986 udtrykkeligt advarer imod. Hvert % bliver til %25, så et mellemrum går fra %20 til %2520. Hvis det afkodede resultat stadig indeholder sekvenser som %20, siger værktøjet, at teksten sandsynligvis er kodet to gange, og tilbyder Afkod igen.
  • En ugyldig sekvens, et % der ikke efterfølges af to hex-cifre som i 100% eller %G1, får JavaScripts decodeURIComponent til at kaste en URIError. Her bliver sådanne sekvenser efterladt uændrede, markeret med rødt og talt med, og resten af teksten bliver afkodet.
  • Gamle Latin-1-links stammer fra tiden før UTF-8, da nogle websteder kodede é som den enkelte byte %E9. caf%E9 er ikke gyldig UTF-8, så decodeURIComponent fejler, og Pythons unquote returnerer caf efterfulgt af erstatningstegnet U+FFFD. Værktøjet læser sådanne bytes som Windows-1252, afkoder caf%E9 til café og tilføjer en note om det.

Kontroltegn i afkodet tekst, som en tabulator eller en nulbyte, vises som synlige symboler som ␉ og ␀, men Kopiér kopierer den rigtige tekst.

URL-parser: del en URL op og redigér dens forespørgselsparametre

Indsæt en adresse i feltet URL på fanen Analysér og redigér URL, og den bliver delt op i Protokol, Værtsnavn, Port, Sti og Fragment, plus Brugernavn og Adgangskode, når URL’en indeholder dem. Værdierne vises afkodede, så fanen også er den hurtigste måde at afkode URL-parametre på: du læser løbesko dame i stedet for l%C3%B8besko+dame. Redigering virker begge veje, som adresselinjen og parametertabellen i Postman. Ret et felt, og URL’en omskrives med det samme, korrekt kodet. Ret URL’en, og alle dele aflæses igen. Dele, du ikke rører, forbliver præcis, som de var, tegn for tegn.

Tabellen Forespørgselsparametre viser hver parameter med dens Navn og Værdi. Fjern fluebenet ved Med i URL’en for at udelade en parameter uden at slette den, hvilket hjælper, når du leder efter den ene parameter, der ødelægger en forespørgsel. Tilføj parameter, Fjern parameter og Sortér A til Å gør, hvad de siger. Gentagne navne som tag=a&tag=b og navne uden værdi som ?debug bevares. Mellemrum i parametre afgør, om mellemrum skrives som %20 eller +; som standard følger den den URL, du indsatte.

Login- og betalingslinks har ofte en anden URL inde i en parameter, kodet så dens egne ? og & ikke blandes sammen med de ydre:

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

En værdi, der selv er en URL, typisk i redirect_uri, return, url eller next, får en knap Redigér URL’en indeni. Den indre adresse https://app.example.com/callback?tab=2 åbnes som sit eget niveau med egne dele og parametre, en brødkrumme (Hoved-URL › redirect_uri) fører tilbage, og hver ændring bliver kodet tilbage i den ydre URL. Kopiér hoved-URL kopierer resultatet. Det virker flere niveauer ned.

Når delen efter # ligner parametre, som i #access_token=...&state=... i OAuth implicit flow eller #/search?q=shoes i ruterne i single page-apps, viser en anden tabel, Fragmentparametre, dem også.

Parseren peger også på problemer: en URL uden protokol, som browsere behandler som et relativt link; en port uden for 0 til 65535; og tegn, der skal kodes, som mellemrum, bogstaver med accenter, " eller <, hvilket Kod dem retter i ét trin. Tekst uden adresse, som a=1&b=2, læses som en forespørgselsstreng. For et internationaliseret domænenavn (på engelsk) viser værktøjet Punycode-formen, som DNS og browsere bruger, så münchen.de bliver til xn--mnchen-3ya.de, og et domæne, der starter med xn--, får sin læsbare form.

Kopiér URL kopierer den færdige adresse, Åbn åbner den i en ny fane (kun http- og https-links), og Kopiér som JSON giver dig parametrene som et JSON-objekt, hvor gentagne navne samles i en liste.

Fjern UTM og andre sporingsparametre fra en URL

Links fra nyhedsbreve, annoncer og sociale netværk har parametre, der kun fortæller webstedet, hvor den besøgende kom fra. UTM-parametrene (på engelsk) utm_source, utm_medium, utm_campaign, utm_term og utm_content går tilbage til Urchin, forgængeren til Google Analytics. Klik-id’er som fbclid (Facebook), gclid (Google Ads) og msclkid (Microsoft Advertising) bliver tilføjet af platformene selv.

Parseren markerer dem med et tag sporing, og Fjern sporing (n) sletter dem alle på én gang. Ud over alle utm_*-parametre genkender den mere end 20 andre, som ttclid (TikTok), mc_cid (Mailchimp) og _hsenc (HubSpot). Parametre, siden har brug for, bliver stående: i butikslinket fra Prøv et eksempel fjerner Fjern sporing (4) utm_source, utm_medium, utm_campaign og fbclid og beholder q, size, return og fragmentet #reviews.

Et link, der skal ind i en QR-kode, er værd at rense her først. Uden sporingsparametre er det kortere, og et kortere link giver en mindre tæt kode, der er lettere at scanne.

Hvad procentkodning er, og hvordan tegn bliver til %XX

Procentkodning (på engelsk), også kaldet URL-kodning, skriver et tegn som % efterfulgt af to hexadecimale cifre. En URL må kun indeholde et begrænset udvalg af ASCII-tegn, og nogle af dem har en opgave: ? begynder forespørgslen, & adskiller parametre, # begynder fragmentet. RFC 3986 kalder dem reserverede tegn (: / ? # [ ] @ og ! $ & ' ( ) * + , ; =). Bogstaver, tal og - . _ ~ er ureserverede og skal aldrig kodes. Alt andet, og hvert reserveret tegn brugt som almindelige data, bliver kodet.

Tegn uden for ASCII bliver først lavet om til UTF-8-bytes, og hver byte får sin egen %XX:

  • é er U+00E9, som UTF-8 gemmer som de to bytes C3 A9, så det bliver til %C3%A9.
  • € er U+20AC, tre bytes: %E2%82%AC.
  • En emoji som U+1F600 (smilende ansigt) fylder fire bytes: %F0%9F%98%80.

%c3%a9 og %C3%A9 betyder det samme, men RFC 3986 anbefaler store bogstaver, og det er det, værktøjet skriver. En tabel over procentkodning af de tegn, du oftest møder:

TegnKodetTegnKodet
mellemrum%20+%2B
!%21,%2C
"%22/%2F
#%23:%3A
$%24;%3B
%%25=%3D
&%26?%3F
'%27@%40
(%28[%5B
)%29]%5D
*%2Alinjeskift%0A

URL encoding i JavaScript, Python og PHP

Alle sprog har funktioner til det, og de adskiller sig mest i, hvordan de behandler mellemrum, skråstreger og ! ' ( ) * ~.

JavaScript har encodeURIComponent (på engelsk) til en værdi, encodeURI til en hel adresse og URLSearchParams til formularkodning:

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 laver ikke + om til et mellemrum, og den kaster en URIError ved en ugyldig sekvens som 100%.

I Python ligger funktionerne i urllib.parse. quote bevarer som standard / (safe='/') og koder ellers alt undtagen de ureserverede tegn i RFC 3986. quote_plus skriver mellemrum som + og koder også /:

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'

I PHP koder urlencode på samme måde som en HTML-formular og skriver et mellemrum som +, mens rawurlencode følger RFC 3986 og skriver %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 giver det samme resultat som Streng RFC 3986. urlencode svarer til Formulardata, bortset fra *, som den koder som %2A.

Ofte stillede spørgsmål

Skal et mellemrum kodes som %20 eller +?

%20 virker overalt i en URL. Et + betyder kun et mellemrum i forespørgselsstrengen og i formulardata, det format som HTML-formularer sender. I en sti er + et almindeligt plustegn, så /a+b forbliver /a+b. Når en forespørgselsværdi skal indeholde et rigtigt plustegn, skriver du det som %2B. I værktøjet skriver Formulardata mellemrum som + og de tre andre tilstande som %20.

Hvad betyder %20, %2F og %3D i en URL?

Det er kodede tegn: %20 er et mellemrum, %2F en skråstreg og %3D et lighedstegn. Andre, du ofte ser, er %26 (&), %3F (?), %3A (:), %2C (komma) og %27 (apostrof). De to cifre er tegnets kode i hexadecimal. Bogstaver med accenter og andre tegn uden for ASCII fylder to til fire sådanne par, som %C3%A9 for é. Indsæt hele strengen i afkoderen for at læse den.

Hvad er forskellen på encodeURI og encodeURIComponent?

encodeURI er beregnet til en hel adresse og lader de tegn, der giver den struktur, som : / ? # & =, være i fred. encodeURIComponent er beregnet til én del, en parameterværdi eller et stisegment, og koder også disse tegn, så https://example.com/?a=1&b=2 bliver til https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. I dette værktøj svarer Parameterværdi til encodeURIComponent, og Hel URL er som encodeURI, men bevarer eksisterende sekvenser som %20 i stedet for at gøre dem til %2520.

Hvordan fjerner jeg UTM-parametre fra en URL?

Indsæt linket på fanen Analysér og redigér URL, og tryk på Fjern sporing (n). Den sletter alle utm_*-tags og klik-id'er som fbclid og gclid på én gang. Tryk derefter på Kopiér URL. Vil du kun fjerne nogle af dem, så brug Fjern parameter på de rækker, du ikke vil have.

Er URL-kodning det samme som kryptering eller Base64?

Nej. URL-kodning skjuler ingenting: alle kan afkode caf%C3%A9 til café igen, så det beskytter aldrig en adgangskode eller et token. Det gør bare tegn sikre at bruge i en adresse. Base64 er en anden kodning, der laver alle data, også binære filer, om til en streng på 64 tegn. En Base64-streng i en URL skal stadig have sine +, / og = kodet, medmindre du bruger den URL-sikre variant, som Base64 encoder og dekoder kan lave.

Bliver de URL'er, jeg indsætter, uploadet eller gemt?

Nej. Kodning, afkodning og parsing kører i din browser, og intet af det, du indsætter, bliver sendt til en server. Det er vigtigt, fordi URL-adresser ofte indeholder adgangstokens, sessions-id'er eller koder til nulstilling af adgangskode. Browseren husker kun din valgte fane og dine indstillinger, aldrig teksterne. Det eneste, der indlæser adressen, er Åbn, som åbner den i en ny fane, ligesom et klik på linket ville gøre.

Flere værktøjer til programmører findes i kategorien Udviklere, og værktøjer, der laver et format om til et andet, er samlet under Konvertere. For at finde forskellen på to lange URL’er, for eksempel et fungerende og et fejlende API-kald, kan du indsætte dem i værktøjet til at sammenligne tekster og sammenligne efter tegn.

Jeg ville sætte pris på, hvis du kunne dele disse sider med venner, bogmærke dem eller linke til dem. Tak! 🙏