URL encoder și decoder

Acrafto Team Dezvoltatori
Actualizat
Codifică ca

Pentru o singură valoare din interogare sau un segment de cale. Codifică tot, în afară de litere, cifre și - _ . ! ~ * ' ( ), la fel ca encodeURIComponent.

Rezultat

Totul rulează în browserul tău și nimic din ce lipești nu este încărcat. Contează, pentru că URL-urile conțin adesea token-uri și ID-uri de sesiune.

URL encode și decode online, pe măsură ce scrii: instrumentul transformă spațiile, literele cu diacritice și simbolurile precum & sau ? în secvențe codificate procentual, cum este %20, și le readuce la text lizibil. A doua filă este un parser de URL. Împarte orice adresă în protocol, host, cale și parametri de interogare pe care îi poți edita, dezactiva sau curăța de etichetele de urmărire, apoi scrie la loc URL-ul codificat corect. Totul se întâmplă în browserul tău.

Cum faci URL encode și decode unui text

  1. Scrie sau lipește în câmpul din fila Codificare / Decodare. Rezultat se actualizează la fiecare tastă apăsată.
  2. Alege Direcție. Codifică face textul sigur pentru un URL, iar Decodifică transformă caf%C3%A9%20au%20lait înapoi în café au lait. Dacă lipești într-un câmp gol un text cu secvențe precum %20, instrumentul trece singur pe Decodifică (Codifică-l te readuce). Un text simplu, care trebuie codificat, lipit în modul Decodifică, trece la fel pe Codifică, cu Decodifică-l.
  3. La codificare, alege la Codifică ca ce fel de text este (vezi secțiunea următoare). Varianta implicită, Valoare de parametru, e potrivită pentru o singură valoare din interogare.
  4. Copiază pune rezultatul în clipboard. Inversează mută rezultatul în câmpul de intrare și schimbă direcția. E o verificare rapidă dus-întors: decodificarea textului pe care tocmai l-ai codificat trebuie să-ți dea înapoi textul original.

Fiecare caracter schimbat de instrument este evidențiat în rezultat. Ține cursorul deasupra lui ca să vezi caracterul, punctul lui de cod Unicode și octeții, de exemplu é U+00E9 %C3%A9. Sub câmpuri vezi numărul de Caractere, de Octeți UTF-8 și de Caractere codificate (sau Caractere decodificate). Încearcă un exemplu încarcă propoziția Preț: 50 % reducere, ștrudel & cafea? Da!, care are 41 de caractere, dar 43 de octeți UTF-8, pentru că fiecare literă cu diacritice (ț și ș) ocupă doi octeți.

La codificare, Fiecare rând separat codifică fiecare rând pe cont propriu și păstrează întreruperile de rând, ceea ce se potrivește unei liste de valori sau de linkuri. Fără această opțiune, și întreruperea de rând este codificată și devine %0A. Când textul este un URL cu parametri, instrumentul oferă Împarte-l în părți, care deschide adresa în fila parserului.

Codifică un parametru de URL, un URL întreg sau date de formular

Nu toate caracterele trebuie codificate peste tot. O bară oblică separă directoarele într-o cale, dar este simplă dată în valoarea unui parametru, deci rezultatul corect depinde de ceea ce codifici. Codifică ca oferă patru moduri:

  • Valoare de parametru funcționează ca encodeURIComponent din JavaScript și se potrivește unei singure valori din interogare sau unui segment de cale. Codifică tot, în afară de litere, cifre și - _ . ! ~ * ' ( ), așa că un &, =, / sau ? din valoare nu poate strica URL-ul. Codificarea lui café & crème dă caf%C3%A9%20%26%20cr%C3%A8me, gata de pus după q=.
  • URL întreg este pentru o adresă completă, care trebuie doar curățată. Codifică spațiile, caracterele non-ASCII, caracterele de control, apostroful invers și " < > \ ^ { | }, și păstrează tot ce dă structură unui URL: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Astfel https://example.com/search?q=café au lait&lang=fr devine https://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Secvențele deja codificate rămân neschimbate, iar un % singur devine %25. Aici diferă de encodeURI din JavaScript, care transformă un %20 existent în %2520 și codifică parantezele drepte ale unei adrese IPv6, precum http://[2001:db8::1]:8080/.
  • Date de formular urmează formatul application/x-www-form-urlencoded (în engleză), pe care îl produc formularele HTML și URLSearchParams. Un spațiu devine +, iar necodificate rămân doar literele, cifrele și * - . _, deci și ! ' ( ) ~ sunt codificate.
  • RFC 3986 strict lasă necodificate doar caracterele nerezervate din RFC 3986 (în engleză): litere, cifre și - . _ ~. OAuth 1.0 (RFC 5849) și AWS Signature Version 4 cer exact această formă, pentru că o semnătură se potrivește doar dacă ambele părți codifică la fel ! sau *.

Aceleași caractere în fiecare mod:

CaracterValoare de parametruURL întregDate de formularRFC 3986 strict
spațiu%20%20+%20
&%26&%26%26
/%2F/%2F%2F
+%2B+%2B%2B
~~~%7E~
!!!%21%21
****%2A
é%C3%A9%C3%A9%C3%A9%C3%A9

Textul este întotdeauna codificat în UTF-8, iar cifrele hexazecimale sunt întotdeauna majuscule. Dacă textul introdus conține deja secvențe precum %20, o notă te anunță și oferă Decodifică-l, ca să nu codifici textul de două ori din greșeală.

Ca să transmiți JSON într-un parametru de interogare, minifică-l în formatatorul JSON și codifică-l ca Valoare de parametru: {"id":7,"tags":["a","b"]} devine %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Merge și invers: decodifică parametrul aici, apoi formatează-l acolo.

Probleme la URL decode: semnul plus, %2520 și secvențe stricate

De obicei decodificarea merge fără probleme, dar patru situații încurcă lumea. Instrumentul le tratează pe fiecare, în loc să se oprească cu o eroare:

  • Semnul plus ține locul unui spațiu în datele de formular și în majoritatea șirurilor de interogare. Decodifică + ca spațiu este activat implicit, deci caf%C3%A9+au+lait se decodifică în café au lait. Într-un URL întreg, doar semnele plus de după ? contează ca spații, pentru că într-o cale plusul este un caracter obișnuit. Dezactivează opțiunea când plusul trebuie luat ca atare. Un plus codificat ca %2B rămâne întotdeauna plus.
  • Dubla codificare apare când două straturi de cod codifică aceeași valoare, lucru împotriva căruia RFC 3986 avertizează explicit. Fiecare % devine %25, așa că un spațiu trece din %20 în %2520. Dacă rezultatul decodificat mai conține secvențe precum %20, instrumentul spune că textul a fost probabil codificat de două ori și oferă Decodifică din nou.
  • O secvență nevalidă, adică un % care nu e urmat de două cifre hexazecimale, ca în 100% sau %G1, face ca decodeURIComponent din JavaScript să arunce un URIError. Aici astfel de secvențe sunt lăsate neschimbate, marcate cu roșu și numărate, iar restul textului este decodificat.
  • Linkurile vechi în Latin-1 vin din vremea dinaintea UTF-8, când unele site-uri codificau é ca octetul singur %E9. caf%E9 nu este UTF-8 valid, deci decodeURIComponent eșuează, iar unquote din Python returnează caf urmat de caracterul de înlocuire U+FFFD. Instrumentul citește acești octeți ca Windows-1252, decodifică caf%E9 în café și adaugă o notă despre asta.

Caracterele de control din textul decodificat, precum un tab sau un octet nul, apar ca simboluri vizibile, de exemplu ␉ și ␀, dar Copiază copiază textul real.

Parser de URL: împarte un URL și editează parametrii de interogare

Lipește o adresă în câmpul URL din fila Analiză și editare URL și ea este împărțită în Protocol, Host, Port, Cale și Fragment, plus Utilizator și Parolă când URL-ul le conține. Valorile sunt afișate decodificate, deci fila este și cea mai rapidă cale de a decodifica parametrii unui URL: citești șosete bumbac în loc de %C8%99osete+bumbac. Editarea merge în ambele sensuri, ca bara de adrese și tabelul de parametri din Postman. Schimbi un câmp și URL-ul este rescris pe loc, codificat corect; schimbi URL-ul și toate părțile sunt citite din nou. Părțile pe care nu le atingi rămân exact așa cum erau, caracter cu caracter.

Tabelul Parametri de interogare listează fiecare parametru cu Nume și Valoare. Debifează Include în URL ca să lași un parametru deoparte fără să-l ștergi, ceea ce ajută când cauți parametrul care strică o cerere. Adaugă parametru, Elimină parametrul și Sortează de la A la Z fac ce spun. Numele repetate, precum tag=a&tag=b, și numele fără valoare, precum ?debug, sunt păstrate. Spații în parametri hotărăște dacă spațiile se scriu %20 sau +; implicit urmează URL-ul lipit de tine.

Linkurile de autentificare și de plată poartă adesea un al doilea URL într-un parametru, codificat astfel încât ? și & din el să nu se amestece cu cele din exterior:

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

O valoare care este ea însăși un URL, de obicei în redirect_uri, return, url sau next, primește butonul Editează URL-ul din interior. Adresa interioară https://app.example.com/callback?tab=2 se deschide ca nivel separat, cu propriile părți și parametri, un breadcrumb (calea de navigare) (URL principal › redirect_uri) te duce înapoi, iar fiecare modificare este codificată înapoi în URL-ul exterior. Copiază URL-ul principal copiază rezultatul. Funcționează pe mai multe niveluri.

Când partea de după # arată ca niște parametri, ca în #access_token=...&state=... din fluxul implicit OAuth sau #/search?q=shoes în rutele aplicațiilor single page, un al doilea tabel, Parametri din fragment, îi listează și pe aceștia.

Parserul semnalează și probleme: un URL fără protocol, pe care browserele îl tratează ca link relativ; un port în afara intervalului 0 până la 65535; și caractere care trebuie codificate, precum spațiile, literele cu diacritice, " sau <, pe care Codifică-le le repară dintr-un pas. Un text fără adresă, ca a=1&b=2, este citit ca interogare. Pentru un nume de domeniu internaționalizat (în engleză) instrumentul arată forma Punycode folosită de DNS și de browsere, deci münchen.de devine xn--mnchen-3ya.de, iar un domeniu care începe cu xn-- primește forma lizibilă.

Copiază URL copiază adresa gata, Deschide o deschide într-o filă nouă (doar linkuri http și https), iar Copiază ca JSON îți dă parametrii ca obiect JSON, cu numele repetate adunate într-un tablou.

Elimină UTM și alți parametri de urmărire dintr-un URL

Linkurile din newslettere, reclame și rețele sociale poartă parametri care spun site-ului doar de unde a venit vizitatorul. Parametrii UTM (în engleză) utm_source, utm_medium, utm_campaign, utm_term și utm_content provin de la Urchin, predecesorul Google Analytics. ID-urile de clic, precum fbclid (Facebook), gclid (Google Ads) și msclkid (Microsoft Advertising), sunt adăugate chiar de platforme.

Parserul le marchează cu eticheta urmărire, iar Elimină urmărirea (n) le șterge pe toate odată. Pe lângă orice parametru utm_*, recunoaște peste 20 de alții, precum ttclid (TikTok), mc_cid (Mailchimp) și _hsenc (HubSpot). Parametrii de care pagina are nevoie rămân pe loc: în linkul de magazin din Încearcă un exemplu, Elimină urmărirea (4) șterge utm_source, utm_medium, utm_campaign și fbclid și păstrează q, size, return și fragmentul #reviews.

Merită să cureți aici un link care ajunge într-un cod QR. Fără parametri de urmărire este mai scurt, iar un link mai scurt dă un cod mai puțin dens, mai ușor de scanat.

Ce este codificarea procentuală și cum devin caracterele %XX

Codificarea procentuală, numită și URL encoding, scrie un caracter ca % urmat de două cifre hexazecimale. Un URL poate conține doar un set limitat de caractere ASCII, iar unele dintre ele au o funcție: ? începe interogarea, & separă parametrii, # începe fragmentul. RFC 3986 le numește caractere rezervate (: / ? # [ ] @ și ! $ & ' ( ) * + , ; =). Literele, cifrele și - . _ ~ sunt nerezervate și nu trebuie niciodată codificate. Tot restul, plus orice caracter rezervat folosit ca simplă dată, se codifică.

Caracterele din afara ASCII sunt mai întâi transformate în octeți UTF-8, iar fiecare octet primește propriul %XX:

  • é este U+00E9, pe care UTF-8 îl stochează ca doi octeți, C3 A9, deci devine %C3%A9.
  • € este U+20AC, trei octeți: %E2%82%AC.
  • Un emoji precum U+1F600 (față zâmbitoare) ocupă patru octeți: %F0%9F%98%80.

%c3%a9 și %C3%A9 înseamnă același lucru, dar RFC 3986 recomandă majusculele, iar instrumentul scrie exact așa. Un tabel de codificare procentuală cu caracterele pe care le întâlnești cel mai des:

CaracterCodificatCaracterCodificat
spațiu%20+%2B
!%21,%2C
"%22/%2F
#%23:%3A
$%24;%3B
%%25=%3D
&%26?%3F
'%27@%40
(%28[%5B
)%29]%5D
*%2Arând nou%0A

URL encoding în JavaScript, Python și PHP

Fiecare limbaj are funcții pentru asta, iar ele diferă mai ales prin felul în care tratează spațiile, barele oblice și ! ' ( ) * ~.

JavaScript are encodeURIComponent (în engleză) pentru o valoare, encodeURI pentru o adresă întreagă și URLSearchParams pentru codificarea de formular:

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 nu transformă + în spațiu și aruncă un URIError la o secvență nevalidă, precum 100%.

În Python, funcțiile se află în urllib.parse. quote păstrează implicit / (safe='/') și codifică tot restul, în afară de caracterele nerezervate din RFC 3986. quote_plus scrie spațiile ca + și codifică și /:

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'

În PHP, urlencode codifică așa cum o face un formular HTML și scrie spațiul ca +, iar rawurlencode urmează RFC 3986 și scrie %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 dă același rezultat ca RFC 3986 strict. urlencode corespunde cu Date de formular, cu excepția lui *, pe care îl codifică ca %2A.

Întrebări frecvente

Spațiul se codifică ca %20 sau ca +?

%20 funcționează peste tot într-un URL. Un + înseamnă spațiu doar în șirul de interogare și în datele de formular, formatul trimis de formularele HTML. Într-o cale, + este un simplu semn plus, deci /a+b rămâne /a+b. Când o valoare din interogare are nevoie de un plus real, scrie-l ca %2B. În instrument, Date de formular scrie spațiile ca +, iar celelalte trei moduri ca %20.

Ce înseamnă %20, %2F și %3D într-un URL?

Sunt caractere codificate: %20 este un spațiu, %2F o bară oblică, iar %3D semnul egal. Alte secvențe pe care le vezi des sunt %26 (&), %3F (?), %3A (:), %2C (virgulă) și %27 (apostrof). Cele două cifre sunt codul caracterului în hexazecimal. Literele cu diacritice și alte caractere non-ASCII ocupă de la două la patru astfel de perechi, ca %C3%A9 pentru é. Lipește tot șirul în decodor ca să-l citești.

Care este diferența dintre encodeURI și encodeURIComponent?

encodeURI este făcută pentru o adresă întreagă și lasă neatinse caracterele care o structurează, precum : / ? # & =. encodeURIComponent este făcută pentru o singură parte, o valoare de parametru sau un segment de cale, și codifică și aceste caractere, deci https://example.com/?a=1&b=2 devine https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. În acest instrument, Valoare de parametru corespunde cu encodeURIComponent, iar URL întreg este ca encodeURI, dar păstrează secvențele existente, precum %20, în loc să le transforme în %2520.

Cum elimin parametrii UTM dintr-un URL?

Lipește linkul în fila Analiză și editare URL și apasă Elimină urmărirea (n). Șterge dintr-odată toate etichetele utm_* și ID-urile de clic precum fbclid și gclid. Apoi apasă Copiază URL. Ca să scoți doar o parte dintre ei, folosește Elimină parametrul pe rândurile nedorite.

Codificarea URL este același lucru cu criptarea sau cu Base64?

Nu. Codificarea URL nu ascunde nimic: oricine poate decodifica caf%C3%A9 înapoi în café, deci nu protejează niciodată o parolă sau un token. Doar face caracterele sigure pentru o adresă. Base64 este o altă codificare, care transformă orice date, inclusiv fișiere binare, într-un șir de 64 de caractere. Un șir Base64 dintr-un URL are încă nevoie ca +, / și = să fie codificate, dacă nu folosești varianta URL safe, pe care o poate produce encoderul și decoderul Base64.

URL-urile pe care le lipesc sunt încărcate sau stocate?

Nu. Codificarea, decodificarea și analiza rulează în browserul tău, iar nimic din ce lipești nu este trimis unui server. Contează, pentru că URL-urile conțin adesea token-uri de acces, ID-uri de sesiune sau coduri de resetare a parolei. Browserul reține doar fila și opțiunile alese, niciodată textele. Singurul lucru care încarcă adresa este Deschide, care o deschide într-o filă nouă, exact ca un clic pe link.

Mai multe unelte pentru programatori găsești în categoria Dezvoltatori, iar uneltele care transformă un format în altul sunt adunate la Convertoare. Ca să afli ce diferă între două URL-uri lungi, de exemplu un apel API care merge și unul care eșuează, lipește-le în instrumentul de comparare a textelor și compară după caractere.

Aș aprecia dacă ați putea împărtăși aceste pagini cu prietenii, le salvați la favorite sau le legați. Mulțumesc! 🙏