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.
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: ! ' ( ) * - . _ ~
| Tegn | encodeURIComponent | encodeURI |
|---|---|---|
(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.