Whiz Tools

URL-strängsescapare

URL-strängsescapareverktyg

Introduktion

Inom webbutveckling och internetkommunikation spelar URL:er (Uniform Resource Locators) en avgörande roll i att identifiera resurser på webben. Men URL:er har begränsningar för de tecken de kan innehålla. Vissa tecken har speciella betydelser, medan andra är osäkra att använda i URL:er på grund av risken för felaktig tolkning eller korruption under överföring.

URL-kodning, även känd som procentkodning, är en mekanism för att konvertera specialtecken till ett format som kan överföras över internet. Detta verktyg gör att du kan mata in en URL-sträng och escapera specialtecken, vilket säkerställer att URL:en är giltig och kan tolkas korrekt av webbläsare och servrar.

Förstå URL-kodning

Vad är URL-kodning?

URL-kodning innebär att osäkra ASCII-tecken ersätts med en % följt av två hexadecimala siffror som representerar tecknets ASCII-kod. Det säkerställer att information överförs över internet utan förändring.

Till exempel, mellanslagstecknet ' ' ersätts med %20.

Varför är URL-kodning nödvändig?

URL:er kan endast skickas över internet med hjälp av ASCII-teckenuppsättningen. Eftersom URL:er ofta innehåller tecken utanför denna uppsättning måste de konverteras till ett giltigt ASCII-format. URL-kodning garanterar att specialtecken inte orsakar oavsiktliga effekter eller fel i webbförfrågningar.

Tecken som behöver kodas

Enligt RFC 3986-specifikationen måste följande tecken som är reserverade i URL:er procentkodas om de ska användas bokstavligt:

  • Allmänna avgränsare: :, /, ?, #, [, ], @
  • Underavgränsare: !, $, &, ', (, ), *, +, ,, ;, =

Dessutom måste alla icke-ASCII-tecken, inklusive tecken i Unicode, kodas.

Hur fungerar URL-kodning?

Kodningsprocessen

  1. Identifiera specialtecken: Parsar URL-strängen och identifierar tecken som inte är oavsett ASCII-tecken (bokstäver, siffror, -, ., _, ~).

  2. Konvertera till ASCII-kod: För varje specialtecken, hämta dess ASCII- eller Unicode-kodpunkt.

  3. Konvertera till UTF-8 byte-sekvens (om nödvändigt): För icke-ASCII-tecken, koda tecknet till en eller flera byte med hjälp av UTF-8-kodning.

  4. Konvertera till hexadecimal: Konvertera varje byte till dess tvåsiffriga hexadecimala motsvarighet.

  5. Prefixa med procenttecken: Föregå varje hexadecimalt byte med ett %-tecken.

Exempel på kodning

  • Tecken: ' ' (Mellanslag)

    • ASCII-kod: 32
    • Hexadecimal: 20
    • URL-kodad: %20
  • Tecken: 'é'

    • UTF-8-kodning: 0xC3 0xA9
    • URL-kodad: %C3%A9

Kantsituationer att överväga

  • Unicode-tecken: Icke-ASCII-tecken måste kodas i UTF-8 och sedan procentkodas.

  • Redan kodade procenttecken: Procenttecken som är en del av procentkodningar får inte kodas om.

  • Reserverade tecken i frågesträngar: Vissa tecken har speciella betydelser i frågesträngar och bör kodas för att förhindra att strukturen ändras.

URL-avkodning

Vad är URL-avkodning?

URL-avkodning är den omvända processen av URL-kodning. Den konverterar procentkodade tecken tillbaka till sin ursprungliga form, vilket gör URL:en läsbar och tolkbar för människor och system.

Avkodningsprocess

  1. Identifiera procentkodningssekvenser: Lokalisera alla %-symboler följt av två hexadecimala siffror i URL-strängen.

  2. Konvertera hexadecimal till byte: Översätt varje hexadecimalt värde till dess motsvarande byte.

  3. Avkoda UTF-8-byte (om nödvändigt): För flerbyte-sekvenser, kombinera byte och avkoda dem med hjälp av UTF-8-kodning för att få det ursprungliga tecknet.

  4. Ersätt kodade sekvenser: Ersätt de procentkodade sekvenserna med de avkodade tecknen.

Exempel på avkodning

  • Kodad: hello%20world

    • %20 översätts till ett mellanslag ' '
    • Avkodad: hello world
  • Kodad: J%C3%BCrgen

    • %C3%A4 översätts till 'ü' i UTF-8
    • Avkodad: Jürgen

Vikten av URL-avkodning

URL-avkodning är avgörande när man bearbetar användarinmatning från URL:er, läser frågeparametrar eller tolkar data som tas emot från webbförfrågningar. Det säkerställer att informationen som extraheras från en URL är i sin rätta, avsedda form.

Användningsfall

Webbutveckling

  • Frågeparametrar: Kodning av användarinmatning i frågeparametrar för att förhindra fel eller säkerhetsrisker.

  • Sökvägsparametrar: Säker inkludering av dynamiska data i URL-sökvägar.

Datatransmission

  • API:er och webbservicer: Säkerställande av att data som skickas till API:er är korrekt formaterade.

  • Internationell anpassning: Stöd för URL:er med tecken från olika språk.

Säkerhet

  • Förhindra injektionsattacker: Kodning av inmatningar för att mildra risken för cross-site scripting (XSS) och andra injektionsattacker.

Alternativ

Även om URL-kodning är nödvändig, finns det scenarier där andra kodningsmetoder kan vara mer lämpliga:

  • Base64-kodning: Används för att koda binär data inom URL:er eller när en högre informationsdensitet krävs.

  • UTF-8-kodning utan procentkodning: Vissa system använder UTF-8-kodning direkt, men detta kan leda till problem om det inte hanteras korrekt.

Överväg specifikationerna för din applikation för att välja den mest lämpliga kodningsmetoden.

Historia

URL-kodning introducerades med de tidiga specifikationerna för URL- och URI (Uniform Resource Identifier) standarderna på 1990-talet. Behovet av ett konsekvent sätt att koda specialtecken uppstod från de olika systemen och teckenuppsättningarna som användes världen över.

Nyckelmilstolpar inkluderar:

  • RFC 1738 (1994): Definierade URL:er och introducerade procentkodning.

  • RFC 3986 (2005): Uppdaterade URI-syntaxen, förfinade reglerna för kodning.

Över tid har URL-kodning blivit en integrerad del av webbteknologier, vilket säkerställer pålitlig kommunikation mellan olika system och plattformar.

Kodexempel

Här är exempel på hur man utför URL-kodning i olika programmeringsspråk:

' Excel VBA Exempel
Function URLEncode(ByVal Text As String) As String
    Dim i As Integer
    Dim CharCode As Integer
    Dim Char As String
    Dim EncodedText As String

    For i = 1 To Len(Text)
        Char = Mid(Text, i, 1)
        CharCode = AscW(Char)
        Select Case CharCode
            Case 48 To 57, 65 To 90, 97 To 122, 45, 46, 95, 126 ' 0-9, A-Z, a-z, -, ., _, ~
                EncodedText = EncodedText & Char
            Case Else
                If CharCode < 0 Then
                    ' Hantera Unicode-tecken
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

' Användning:
' =URLEncode("https://example.com/?name=Jürgen")
% MATLAB Exempel
function encodedURL = urlEncode(url)
    import java.net.URLEncoder
    encodedURL = char(URLEncoder.encode(url, 'UTF-8'));
end

% Användning:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## Ruby Exempel
require 'uri'

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = URI::DEFAULT_PARSER.escape(url)
puts encoded_url
## Utdata: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Rust Exempel
use url::form_urlencoded;

fn main() {
    let url = "https://example.com/path?query=hello world&name=Jürgen";
    let encoded_url = percent_encode(url);
    println!("{}", encoded_url);
    // Utdata: https://example.com/path%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
}

fn percent_encode(input: &str) -> String {
    use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
    utf8_percent_encode(input, NON_ALPHANUMERIC).to_string()
}
## Python Exempel
import urllib.parse

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = urllib.parse.quote(url, safe=':/?&=')
print(encoded_url)
## Utdata: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// JavaScript Exempel
const url = 'https://example.com/path?query=hello world&name=Jürgen';
const encodedURL = encodeURI(url);
console.log(encodedURL);
// Utdata: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Java Exempel
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class URLEncodeExample {
    public static void main(String[] args) throws Exception {
        String url = "https://example.com/path?query=hello world&name=Jürgen";
        String encodedURL = URLEncoder.encode(url, StandardCharsets.UTF_8.toString());
        // Ersätt "+" med "%20" för mellanslag
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // Utdata: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// C# Exempel
using System;
using System.Net;

class Program
{
    static void Main()
    {
        string url = "https://example.com/path?query=hello world&name=Jürgen";
        string encodedURL = Uri.EscapeUriString(url);
        Console.WriteLine(encodedURL);
        // Utdata: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
    }
}
<?php
// PHP Exempel
$url = 'https://example.com/path?query=hello world&name=Jürgen';
$encodedURL = urlencode($url);
echo $encodedURL;
// Utdata: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%C3%BCrgen
?>
// Go Exempel
package main

import (
    "fmt"
    "net/url"
)

func main() {
    urlStr := "https://example.com/path?query=hello world&name=Jürgen"
    encodedURL := url.QueryEscape(urlStr)
    fmt.Println(encodedURL)
    // Utdata: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%25C3%25BCrgen
}
// Swift Exempel
import Foundation

let url = "https://example.com/path?query=hello world&name=Jürgen"
if let encodedURL = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
    print(encodedURL)
    // Utdata: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
}
## R Exempel
url <- "https://example.com/path?query=hello world&name=Jürgen"
encodedURL <- URLencode(url, reserved = TRUE)
print(encodedURL)
## Utdata: https://example.com/path?query=hello%20world&name=J%C3%BCrgen

Obs: Utdata kan variera något beroende på hur varje språk hanterar reserverade tecken och mellanslag (t.ex. kodning av mellanslag som %20 eller +).

SVG-diagram över URL-kodningsprocessen

URL-kodningsprocess Ursprunglig URL Identifiera special tecken Koda URL Exempel: Inmatning: https://example.com/über uns Utdata: https://example.com/%C3%BCber%20uns

Säkerhetsöverväganden

Korrekt URL-kodning och avkodning är avgörande för säkerheten:

  • Förhindra injektionsattacker: Kodning av användarinmatning hjälper till att förhindra att skadlig kod körs, vilket mildrar risker som cross-site scripting (XSS) och SQL-injektion.

  • Data integritet: Säkerställer att data överförs utan förändring eller korruption.

  • Efterlevnad av standarder: Att följa kodningsstandarder undviker interoperabilitetsproblem mellan system.

Referenser

  1. RFC 3986 - Uniform Resource Identifier (URI): https://tools.ietf.org/html/rfc3986
  2. Vad är URL-kodning och hur fungerar det? https://www.urlencoder.io/learn/
  3. Procentkodning: https://en.wikipedia.org/wiki/Percent-encoding
  4. URL-standard: https://url.spec.whatwg.org/
  5. URI.escape är föråldrad: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Slutsats

URL-kodning är en väsentlig aspekt av webbutveckling och internetkommunikation. Genom att konvertera specialtecken till ett säkert format säkerställer det att URL:er tolkas korrekt av webbläsare och servrar, vilket upprätthåller integriteten och säkerheten i datatransmission. Detta verktyg ger ett bekvämt sätt att escapera specialtecken i dina URL:er, vilket förbättrar kompatibiliteten och förhindrar potentiella fel eller säkerhetsrisker.

Återkoppling