UltKit

URL-kodning og -afkodning

Gør tekst sikker at indsætte i en URL, eller lav sekvenser som %20 om til læsbare tegn igen. Værktøjet bruger browserens egne encodeURIComponent, encodeURI og decodeURIComponent, viser query-parametre i en tabel og sender intet til en server.

Tilstand

0 tegn · 0 ord · 0 linjer

0 tegn · 0 ord · 0 linjer

Kører udelukkende i denne browserfane. Din tekst bliver aldrig uploadet eller gemt.

Hvad hver funktion escaper

Beregnet med selve browserens funktioner. encodeURIComponent lader bogstaver, cifre og disse tegn være i fred: ! ' ( ) * - . _ ~

TegnencodeURIComponentencodeURI
(mellemrum)%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

Procentkodning og de reserverede tegn i RFC 3986

En URL må kun indeholde et begrænset sæt ASCII-tegn. RFC 3986, specifikationen for URI-syntaks fra 2005, deler dem i to grupper. De ikke-reserverede tegn, A–Z, a–z, 0–9 og de fire tegn - . _ ~, skal aldrig kodes. De reserverede tegn har en opgave: de generelle skilletegn : / ? # [ ] @ adskiller skema, vært, sti, forespørgsel og fragment, og underskilletegnene ! $ & ' ( ) * + , ; = adskiller elementer inden for dem, ligesom & og = gør i en query string. Alt andet, og ethvert reserveret tegn, der bruges som almindelige data, skal procentkodes.

Procentkodning skriver en byte som % efterfulgt af to hexadecimale cifre. Teksten konverteres først til UTF-8, så et mellemrum bliver til %20, et é (to bytes) bliver til %C3%A9, og en emoji bliver til fire %XX-grupper. Derfor ender en søgning efter "café & bar" i et link som caf%C3%A9%20%26%20bar: tegnet & er kodet, så serveren ikke læser det som starten på en ny parameter.

encodeURIComponent, encodeURI og afkodning

encodeURIComponent er det rigtige valg til en enkelt del, som en værdi i en query, et stisegment eller en omdirigerings-URL, der sendes som parameter. Den koder alt undtagen de ikke-reserverede tegn og ! ' ( ) *, som JavaScript af historiske årsager lader være. encodeURI (hele URL'en) går ud fra, at input allerede er en komplet adresse, og bevarer de reserverede tegn, så i https://example.com/a b?q=1 bliver kun mellemrummet kodet. At bruge encodeURI på en parameterværdi er en klassisk fejl: et & eller # i værdien ville blive stående og ødelægge URL'en.

Afkod omvender begge funktioner. HTML-formularer, der sendes med GET, bruger det ældre format application/x-www-form-urlencoded, hvor et mellemrum skrives som + i stedet for %20. Lad Behandl + som mellemrum være afkrydset til dem, og fjern fluebenet, når et egentligt plustegn har betydning, f.eks. i et telefonnummer. Hvis input indeholder et % uden to hex-cifre efter, eller bytes der ikke er gyldig UTF-8, fejler afkodningen med en tydelig besked i stedet for at gætte. Når teksten indeholder en query string, vises dens parametre afkodet i en tabel under værktøjet. Til binære data i URL'er er Base64url det sædvanlige alternativ.

Ofte stillede spørgsmål

Skal et mellemrum i en URL være %20 eller et plustegn?
I stier og ifølge RFC 3986 er et mellemrum %20. Formen + betyder kun mellemrum i query strings, der er kodet på samme måde som HTML-formularer, så %20 er det sikre valg overalt.
Hvorfor endte min URL med %2520?
Den er blevet kodet to gange. Første gang blev et mellemrum til %20, og anden gang blev selve %-tegnet kodet som %25. Afkod én gang for at fjerne det ekstra lag, og kod kun værdier ét sted i din kode.
Hvilke tegn skal aldrig procentkodes?
De ikke-reserverede tegn i RFC 3986: bogstaverne A til Z med store og små, cifrene 0 til 9 samt bindestreg, punktum, understreg og tilde.
Kan en URL indeholde æ, ø, å og andre ikke-engelske bogstaver uden kodning?
Browsere viser dem, men på tråden sendes hvert ikke-ASCII-tegn i en sti eller query som procentkodet UTF-8. Domænenavne bruger et separat system, Punycode, som omdanner dem til xn--labels.
Hvorfor melder afkodningen om en ugyldig sekvens?
Teksten har et %, som ikke efterfølges af to hexadecimale cifre, f.eks. et almindeligt "100%", eller bytes afkodes til ugyldig UTF-8. Kod løse %-tegn som %25, før du afkoder.