WORDS
Escape-tecken: Url
En url består av många olika delar, som kan escapas på olika sätt.
https://www.domännamn.se/sökväg/till/fil.html?query=string#hash
Domännamn
Ett domännamn består av en eller flera punktseparerade delar. Varje del kan bestå av bokstäver, siffror och bindestreck. Under huven används endast a-z
, 0-9
och -
, så vill man t.ex. ha ett ä
, så använder man Punycode för att transformera strängen.
www.domännamn.se
→ www.xn--domnnamn-2za.se
Det är upp till applikationen man använder, att avgöra vilket format det ska visas i. Att visa domännamnet med unicodetecken kan vara riskabelt, då det är svårt att skilja på t.ex. vissa kyrilliska tecken och deras latinska motsvarighet.
Sökväg
Den allmänna principen är att sökvägen efter escapning bara ska innehålla synliga ASCII-tecken. För andra tecken, tar man de byte som deras UTF-8-kodning ger, och prefixar deras hexadecimala värde med %
. Några exempel:
%20
- (mellanslag)%22
-"
%23
-#
%25
-%
%26
-&
%27
-'
%2B
-+
%3F
-?
%C3%A5
-å
%C3%A4
-ä
%C3%B6
-ö
Detta gäller i alla delar av av url:en. Men... man kommer undan med att inte escapa allt. I sökvägen /fil?queryprop=value&queryprop2=value2#hash
kan vi se att ?
, =
, &
och #
har särskilda betydelser. Som vi ser i nästa avsnitt, så har också +
en särskild betydelse ibland. Detta innebär:
Del av sökväg | Behöver inte escapas | Måste escapas |
---|---|---|
fil |
= , & , + |
? , # |
queryprop |
? |
= , & , # , + |
value |
? , = |
& , # , + |
hash |
? , = , & , # , + |
inget |
Mellanslag
Jag har ovanför sagt att mellanslag escapas till %20
. Det är också min rekommendation. Men, det är ju aldrig riktigt så enkelt. När formulär skickas, så omvandlas mellanslag istället till +
. Man måste således alltid escapa +
när det förekommer i en querysträng (efter ?
i slutet på url:en).
I webbläsaren
När en url anges i webbläsaren (t.ex. i HTML eller ajax), så måste tekniskt sett inte en särskilt stor del av url:en mycket escapas. Det enda som webbläsaren inte klarar av att escapa på egen hand är det som angetts i tabellen ovan, mellanslag och procenttecknet. Däremot är det ändå en bra idé att escapa url:en så att den blir korrekt.
När man anger en url i HTML (t.ex. en länk), så måste länken förstås HTML-escapas... se kommande artikel i denna serie.
I webbservern
HTTP-standarden tolkas flexibelt, och dom flesta servrar stödjer att man i HTTP-anropet inte escapat allt korrekt. Däremot kommer troligen din webbläsare eller HTTP-bibliotek att escapa url:en åt dig automatiskt, så att webbservern inte behöver ta hand om konstiga url:er.
.
och ..
Om ett url-segment - det som står mellan /
- är .
eller ..
så innebär det en "navigering". .
betyder "gå till aktuell mapp" och ..
betyder "gå till föräldramappen". Dessa behöver väl inte escapas, men du bör vara medveten om att ingen mapp eller fil kan ha något av dessa namn.