URL Kodning: Komplett Guide
URL-kodning (även kallad procentkodning) är avgörande för att överföra data i URL:er. Att förstå när och hur tecken måste kodas förhindrar trasiga länkar, säkerhetshål och dataöverföringsfel.
Varför URL-Kodning?
URL:er designades för ASCII-text och har reserverade tecken med speciella betydelser. Tecknet ? startar query strings, & separerar parametrar, = tilldelar värden och # markerar fragment. Om din data innehåller dessa tecken måste de kodas för att undvika feltolkning.
Föreställ dig en sökning efter "Tom & Jerry". Utan kodning skulle ?q=Tom & Jerry behandla & som parameteravskiljare, vilket bryter frågan. Rätt kodat: ?q=Tom%20%26%20Jerry behandlar hela strängen som ett värde.
Icke-ASCII-tecken måste också kodas. URL:er kan bara innehålla ASCII. Internationella tecken som ü, 漢, или måste bli procentkodade bytes för att kunna förekomma i URL:er.
Mellanslag är ett vanligt specialfall. De kan kodas som %20 eller ibland som + (men endast i query strings). Inkonsekvensen orsakar frekventa buggar. Använd %20 för mest tillförlitlig kompatibilitet.
Säkerhetskonsekvenser är betydande. Okodad användarinmatning i URL:er kan möjliggöra XSS-sårbarheter, injektionsattacker och URL-manipulation. Koda alltid användargenererat innehåll som placeras i URL:er.
Hur URL-Kodning Fungerar
URL-kodning ersätter osäkra tecken med procenttecken följt av två hexadecimala siffror. Mellanslagstecknet (ASCII 32, hex 20) blir %20. Tecknet & (ASCII 38, hex 26) blir %26.
För UTF-8-tecken är processen: Konvertera tecknet till UTF-8-bytes, sedan procentkoda varje byte. Tecknet ü är UTF-8-bytes C3 BC, så det blir %C3%BC. Det kinesiska tecknet 中 är UTF-8 E4 B8 AD, så det blir %E4%B8%AD.
Säkra tecken som inte behöver kodning är A-Z, a-z, 0-9 och dessa: - _ . ~ (även om vissa implementationer även kodar dessa).
Reserverade tecken som måste kodas när de är bokstavliga inkluderar: ! # $ & ' ( ) * + , / : ; = ? @ [ ]. Dessa har speciella URL-betydelser, så deras bokstavliga användning kräver kodning.
Dubbelkodning är ett vanligt misstag. Att koda en redan kodad sträng gör %20 till %2520. Avkoda före omkodning eller följ kodningsstatus noggrant.
JavaScript URL-Funktioner
JavaScript erbjuder flera URL-kodningsfunktioner med olika beteenden. Att välja fel bryter URL:er eller exponerar säkerhetssårbarheter.
encodeURIComponent() är vad du vanligtvis vill ha. Den kodar allt utom A-Z a-z 0-9 - _ . ! ~ * ' ( ). Använd den för parametervärden: '?name=' + encodeURIComponent(userInput).
encodeURI() kodar för kompletta URL:er och lämnar reserverade tecken som : / ? & okodade. Använd den för hela URL:er: encodeURI('https://example.com/path?q=test'). Men den hanterar inte parametervärden som innehåller reserverade tecken korrekt.
Den kritiska skillnaden: encodeURI('a&b') returnerar 'a&b' (& förblir). encodeURIComponent('a&b') returnerar 'a%26b' (& kodas). För de flesta användningsfall är encodeURIComponent korrekt för värden.
För avkodning använd decodeURIComponent() för enskilda värden och decodeURI() för kompletta URL:er.
Legacy-funktionerna escape() och unescape() är föråldrade och hanterar inte Unicode korrekt. Använd dem aldrig i ny kod.
Prova verktyget
URL Kodare/Avkodare
Läs mer
Vanliga frågor
URL Kodare/Avkodare
Vanliga frågor →