Kodiranje in dekodiranje URL
Pripravite besedilo tako, da ga lahko varno vstavite v URL, ali zaporedja, kot je %20, pretvorite nazaj v berljive znake. Orodje uporablja vgrajene funkcije vašega brskalnika encodeURIComponent, encodeURI in decodeURIComponent, parametre poizvedbe prikaže v tabeli in ničesar ne pošlje na strežnik.
0 znakov · 0 besed · 0 vrstic
0 znakov · 0 besed · 0 vrstic
Deluje povsem v tem zavihku brskalnika. Vaše besedilo se nikoli ne naloži in ne shrani.
Kaj posamezna funkcija escapira
Izračunano s samimi funkcijami brskalnika. encodeURIComponent pusti črke, števke in te znake nedotaknjene: ! ' ( ) * - . _ ~
| Znak | encodeURIComponent | encodeURI |
|---|---|---|
(presledek) | %20 | %20 |
! | ! | ! |
" | %22 | %22 |
# | %23 | # |
$ | %24 | $ |
% | %25 | %25 |
& | %26 | & |
' | ' | ' |
( | ( | ( |
) | ) | ) |
* | * | * |
+ | %2B | + |
, | %2C | , |
/ | %2F | / |
: | %3A | : |
; | %3B | ; |
= | %3D | = |
? | %3F | ? |
@ | %40 | @ |
[ | %5B | %5B |
] | %5D | %5D |
{ | %7B | %7B |
} | %7D | %7D |
| | %7C | %7C |
\ | %5C | %5C |
^ | %5E | %5E |
` | %60 | %60 |
< | %3C | %3C |
> | %3E | %3E |
~ | ~ | ~ |
- | - | - |
_ | _ | _ |
. | . | . |
é | %C3%A9 | %C3%A9 |
€ | %E2%82%AC | %E2%82%AC |
😀 | %F0%9F%98%80 | %F0%9F%98%80 |
Odstotno kodiranje in rezervirani znaki po RFC 3986
URL lahko vsebuje le omejen nabor znakov ASCII. RFC 3986, specifikacija sintakse URI iz leta 2005, jih deli v dve skupini. Nerezervirani znaki, A–Z, a–z, 0–9 in štirje znaki - . _ ~, kodiranja nikoli ne potrebujejo. Rezervirani znaki imajo svojo nalogo: splošni ločevalniki : / ? # [ ] @ ločujejo shemo, gostitelja, pot, poizvedbo in fragment, podločevalniki ! $ & ' ( ) * + , ; = pa ločujejo elemente znotraj njih, kot to počneta & in = v nizu poizvedbe. Vse drugo in vsak rezervirani znak, uporabljen kot navadni podatek, je treba odstotkovno kodirati.
Odstotkovno kodiranje zapiše bajt kot % in dve šestnajstiški števki. Besedilo se najprej pretvori v UTF-8, zato presledek postane %20, znak é (dva bajta) postane %C3%A9, emoji pa štiri skupine %XX. Zato se iskanje »café & bar« v povezavi znajde kot caf%C3%A9%20%26%20bar: znak & je kodiran, da ga strežnik ne razume kot začetek novega parametra.
encodeURIComponent, encodeURI in dekodiranje
encodeURIComponent je prava izbira za posamezen del, na primer vrednost poizvedbe, segment poti ali URL za preusmeritev, podan kot parameter. Kodira vse razen nerezerviranih znakov in ! ' ( ) *, ki jih JavaScript iz zgodovinskih razlogov pusti pri miru. encodeURI (celoten URL) predpostavlja, da je vnos že popoln naslov, in rezervirane znake ohrani, zato je pri https://example.com/a b?q=1 kodiran le presledek. Uporaba encodeURI za vrednost parametra je klasična napaka: znak & ali # v vrednosti bi ostal in pokvaril URL.
Dekodiraj razveljavi obe funkciji. Obrazci HTML, poslani z GET, uporabljajo starejšo obliko application/x-www-form-urlencoded, v kateri je presledek zapisan kot + namesto %20; za take primere pustite vklopljeno možnost Treat + as a space, izklopite pa jo, kadar je znak plus dobeseden, na primer v telefonski številki. Če vnos vsebuje % brez dveh šestnajstiških števk ali bajte, ki niso veljavni UTF-8, dekodiranje spodleti z jasnim sporočilom, namesto da bi ugibalo. Če besedilo vsebuje niz poizvedbe, so njegovi parametri dekodirani prikazani v tabeli pod orodjem. Za binarne podatke v URL-jih je običajna alternativa Base64url.
Pogosto zastavljena vprašanja
- Ali naj bo presledek v URL-ju %20 ali znak plus?
- V poteh in po RFC 3986 je presledek %20. Oblika + pomeni presledek le v nizih poizvedbe, kodiranih tako kot obrazci HTML, zato je %20 povsod varna izbira.
- Zakaj se je v mojem URL-ju pojavil %2520?
- Kodirano je bilo dvakrat. Prvi prehod je presledek spremenil v %20, drugi pa je kodiral še sam znak % v %25. Dekodirajte enkrat, da odstranite odvečno plast, vrednosti pa v kodi kodirajte samo na enem mestu.
- Kateri znaki nikoli ne potrebujejo odstotnega kodiranja?
- Nerezervirani nabor po RFC 3986: črke od A do Z v obeh velikostih, števke od 0 do 9 ter vezaj, pika, podčrtaj in tilda.
- Ali lahko URL vsebuje šumnike in druge neangleške črke brez kodiranja?
- Brskalniki jih prikažejo, vendar se po omrežju vsak znak zunaj ASCII v poti ali poizvedbi pošlje kot odstotkovno kodiran UTF-8. Domenska imena uporabljajo ločen sistem, Punycode, ki jih pretvori v oznake xn--.
- Zakaj dekodiranje javi napačno oblikovano zaporedje?
- Besedilo vsebuje % brez dveh šestnajstiških števk, na primer dobesedni »100%«, ali pa se bajti dekodirajo v neveljaven UTF-8. Posamezne znake % pred dekodiranjem kodirajte kot %25.