Procentkodning i URL'er: hvad betyder %20, + og %2F?
Procentkodning skriver et tegn, som en URL ikke kan bære sikkert, som et procenttegn efterfulgt af tegnets byteværdi i hexadecimal. Et mellemrum bliver til %20, et et-tegn bliver til %26, og en skråstreg bliver til %2F. Kodningen beskytter linkets struktur, for tegn som & og = adskiller dele af en forespørgsel.
Hvilke tegn kan stå som de er
URI-standarden (RFC 3986), som URL'er bygger på, lader nogle tegn være, som de er: bogstaverne A til Z og a til z, cifrene og de fire tegn - _ . ~. Disse skal aldrig kodes. Andre tegn har en funktion i en URL. Kolon adskiller protokollen fra resten, skråstreger adskiller stidele, spørgsmålstegnet starter forespørgslen, nummertegnet starter et fragment, og & og = deler forespørgslen op i navne og værdier. Et tegn med en funktion skal kodes, når du mener det som data og ikke som struktur.
Derfor kan det samme tegn kodes et sted og ikke et andet. I en forespørgselsværdi skal et et-tegn være %26, ellers deler linket sig det forkerte sted. I stien i et link er det bare et tegn.
Bogstaver uden for engelsk
Bogstaver uden for det basale engelske alfabet kodes som deres UTF-8-bytes, og hver byte skrives som en procentkode. Bogstavet é i café er de to bytes C3 og A9, så det bliver til %C3%A9, og hele ordet bliver til caf%C3%A9.
Et enkelt eksempel gør reglerne konkrete. Teksten a b&c=d/é bliver, kodet som komponent, til a%20b%26c%3Dd%2F%C3%A9. Alle tegn, der ikke er et sikkert bogstav, ciffer eller tegn, bliver kodet: mellemrummet, et-tegnet, lighedstegnet, skråstregen og det accentuerede bogstav.
Komponent eller hel URL
Der findes to slags kodning, og det har en grund. En komponentkodning behandler alle reserverede tegn som data. Brug den til én værdi, for eksempel en søgeterm eller et filnavn i et link. Hvis du koder »rock & roll« som søgeterm, får du rock%20%26%20roll, så et-tegnet bliver i værdien.
En hel URL-kodning bevarer strukturen. Hvis du koder https://example.com/a b, får du https://example.com/a%20b, hvor skråstregerne og kolonet er urørte. Brug den til en komplet adresse, der skal gøres gyldig, ikke til en værdi, der skal stå inde i et link.
URL-værktøjet har en indstilling for Komponent og en for Hel URL af netop den grund. Afkodning af en hel URL beholder også kodede strukturtegn som %26 og %3D, så linket stadig virker efter afkodningen.
Plustegn og formulardata
Webformularer bruger en anden konvention. Når en formular sendes som formulardata, skrives et mellemrum som + i stedet for %20. Et bogstaveligt plustegn skrives så som %2B. Udtrykket C++ tips bliver derfor til C%2B%2B+tips i formulardata og C%2B%2B%20tips i en almindelig komponentkodning.
Afkodning har den samme forskel. I en forespørgselsstreng betyder + normalt et mellemrum. I stien i et link er + et plustegn. Værktøjet læser kun + som et mellemrum, når Brug + til mellemrum (formulardata) er markeret, så lad den være fra for stier og for værdier, hvor plustegnet er ægte.
Sådan læser du en lang forespørgsel
Et link bærer ofte sine indstillinger efter spørgsmålstegnet. Tag dette eksempel:
https://shop.example/search?q=red%20shirt&size=M&tag=summer%2Bsale
Afkodet betyder det, at søgningen er efter rød trøje, størrelsen er M, og tagget er summer+sale. %2B forbliver et plustegn, fordi det blev kodet sådan. Indsæt linket i URL-værktøjet, og det viser hvert navn og hver værdi efter afkodning, så et langt link bliver nemt at læse. Hvis du kun vil have den korte adresse uden sporingsindstillinger, rens linket først.
Dobbelt kodning
Den hyppigste fejl er at kode en værdi to gange. Hvis du koder teksten %20 igen, får du %2520, for selve procenttegnet kodes som %25. Siden leder så efter et bogstaveligt %20 i værdien, og søgningen eller siden matcher ikke. Afkod linket én gang, kontrollér resultatet, og kod kun en værdi, når du har brug for det.
Ugyldige escape-sekvenser
Et procenttegn skal efterfølges af to hexadecimale cifre, og cifrene skal danne gyldig UTF-8 for accenterede bogstaver. Et link, der er blevet klippet af, eller et løst procenttegn skrevet i en tekst, kan efterlade en ugyldig escape-sekvens som %E0%A4%A. Værktøjet afkoder det, den kan, lader de ugyldige bytes stå præcis, som de er, og oplyser, hvor mange den ikke kunne afkode. Det stopper ikke ved den første fejl.
Særlige tilfælde
- Mellemrum i et link skrevet i hånden. En browsers adresselinje koder mellemrum for dig, men et link, der er kopieret ind i et dokument, kan stadig indeholde rå mellemrum. Kod dem, før du sender linket videre.
- Domænenavne uden for det engelske alfabet. Disse bruger et særskilt system, punycode, og kodning af stien eller forespørgslen ændrer ikke værtsnavnet.
- Halv emoji. En ødelagt kopi kan efterlade en enkelt surrogat-halvdel, som ikke kan kodes. Værktøjet erstatter den med erstatningssymbolet og fortæller dig, at det har gjort det.
- Base64 i links. En Base64-værdi i et link følger sine egne regler, med - og _ i stedet for + og /. Se Base64 forklaret.
Sådan gør du med fixmint
- Indsæt teksten eller linket i Tekst eller URL.
- Vælg Kod eller Afkod, og derefter Komponent for én værdi eller Hel URL for en hel adresse.
- Markér Brug + til mellemrum (formulardata) for links kopieret fra en webformular.
- For et link: læs Forespørgselsparametre, afkodet for at se hvert navn og hver værdi.
- Kopiér resultatet.
Hurtige svar
Hvad betyder %20?
Et mellemrum. Dets byteværdi er 20 i hexadecimal.
Hvorfor står der et + i mit link i stedet for %20?
Linket stammer sandsynligvis fra en formular, hvor + betyder et mellemrum. Indstillingen »Brug + til mellemrum (formulardata)« afkoder det.
Hvorfor ser jeg %2520 i mit link?
Værdien er kodet to gange. Procenttegnet i %20 er blevet kodet igen som %25. Afkod én gang for at komme tilbage til %20, og en gang til for at få mellemrummet.
Oversat fra Engelsk original med AI-hjælp.
Kommentarer
Ingen kommentarer endnu. Vær den første.


