Whiz Tools

URL-strengkoder

URL-strengs Escaper Verktøy

Introduksjon

I webutvikling og internettkommunikasjon spiller URL-er (Uniform Resource Locators) en avgjørende rolle i å identifisere ressurser på nettet. Imidlertid har URL-er restriksjoner på hvilke tegn de kan inneholde. Enkelte tegn har spesielle betydninger, mens andre er usikre å bruke i URL-er på grunn av muligheten for feiltolkning eller korrupsjon under overføring.

URL-koding, også kjent som prosent-koding, er en mekanisme for å konvertere spesialtegn til et format som kan overføres over internett. Dette verktøyet lar deg skrive inn en URL-streng og eskapere spesialtegn, noe som sikrer at URL-en er gyldig og kan tolkes riktig av nettlesere og servere.

Forstå URL-koding

Hva er URL-koding?

URL-koding innebærer å erstatte usikre ASCII-tegn med en % etterfulgt av to heksadesimale sifre som representerer tegnets ASCII-kode. Det sikrer at informasjonen overføres over internett uten endringer.

For eksempel, mellomromstegnet ' ' blir erstattet med %20.

Hvorfor er URL-koding nødvendig?

URL-er kan bare sendes over internett ved hjelp av ASCII-tegnsettet. Siden URL-er ofte inneholder tegn utenfor dette settet, må de konverteres til et gyldig ASCII-format. URL-koding garanterer at spesialtegn ikke forårsaker utilsiktede effekter eller feil i webforespørslene.

Tegn som må kodes

I henhold til RFC 3986-spesifikasjonen må følgende tegn som er reservert i URL-er prosent-kodes hvis de skal brukes bokstavelig:

  • Generelle avgrensere: :, /, ?, #, [, ], @
  • Underavgrensere: !, $, &, ', (, ), *, +, ,, ;, =

I tillegg må alle ikke-ASCII-tegn, inkludert tegn i Unicode, kodes.

Hvordan fungerer URL-koding?

Kodingprosessen

  1. Identifiser spesialtegn: Analyser URL-strengen og identifiser tegn som ikke er ureservede ASCII-tegn (bokstaver, sifre, -, ., _, ~).

  2. Konverter til ASCII-kode: For hvert spesialtegn, hent dets ASCII- eller Unicode-kodepunkt.

  3. Konverter til UTF-8 byte-sekvens (hvis nødvendig): For ikke-ASCII-tegn, kod tegnene til en eller flere byte ved hjelp av UTF-8-koding.

  4. Konverter til heksadesimal: Konverter hver byte til dens to-sifrede heksadesimale ekvivalent.

  5. Prefiks med prosent-tegn: Foran hver heksadesimale byte med et %-tegn.

Eksempel på koding

  • Tegn: ' ' (Mellomrom)

    • ASCII-kode: 32
    • Heksadesimal: 20
    • URL-kodet: %20
  • Tegn: 'é'

    • UTF-8-koding: 0xC3 0xA9
    • URL-kodet: %C3%A9

Grensekaser å vurdere

  • Unicode-tegn: Ikke-ASCII-tegn må kodes i UTF-8 og deretter prosent-kodes.

  • Allerede kodede prosent-tegn: Prosent-tegn som er en del av prosent-koding må ikke kodes på nytt.

  • Reserverte tegn i spørringsstrenger: Enkelte tegn har spesielle betydninger i spørringsstrenger og bør kodes for å forhindre endring av strukturen.

URL-dekoding

Hva er URL-dekoding?

URL-dekoding er den motsatte prosessen av URL-koding. Den konverterer prosent-kodede tegn tilbake til sin opprinnelige form, noe som gjør URL-en lesbar og forståelig for mennesker og systemer.

Dekodingsprosess

  1. Identifiser prosent-koding sekvenser: Finn alle %-symboler etterfulgt av to heksadesimale sifre i URL-strengen.

  2. Konverter heksadesimal til byte: Oversett hver heksadesimalverdi til sin tilsvarende byte.

  3. Dekod UTF-8 byte (hvis nødvendig): For flerbyte-sekvenser, kombiner byte og dekod dem ved hjelp av UTF-8-koding for å få det opprinnelige tegnet.

  4. Erstatt kodede sekvenser: Erstatt de prosent-kodede sekvensene med de dekodede tegnene.

Eksempel på dekoding

  • Kodet: hello%20world

    • %20 oversettes til et mellomrom ' '
    • Dekodet: hello world
  • Kodet: J%C3%BCrgen

    • %C3%A4 oversettes til 'ü' i UTF-8
    • Dekodet: Jürgen

Viktigheten av URL-dekoding

URL-dekoding er avgjørende når man behandler brukerinput fra URL-er, leser spørringsparametere eller tolker data mottatt fra webforespørsel. Det sikrer at informasjonen som hentes fra en URL er i sin rette, tiltenkte form.

Bruksområder

Webutvikling

  • Spørringsparametere: Koding av brukerinput i spørringsparametere for å forhindre feil eller sikkerhetsproblemer.

  • Sti-parametere: Trygg inkludering av dynamiske data i URL-stier.

Datatransmisjon

  • API-er og webtjenester: Sikre at data sendt til API-er er riktig formatert.

  • Internasjonalisering: Støtte URL-er med tegn fra forskjellige språk.

Sikkerhet

  • Forebygge injeksjonsangrep: Koding av input for å redusere risikoen for cross-site scripting (XSS) og andre injeksjonsangrep.

Alternativer

Selv om URL-koding er essensiell, finnes det scenarier der andre kodingsmetoder kan være mer hensiktsmessige:

  • Base64-koding: Brukt for å kode binære data i URL-er eller når høyere informasjonsdensitet er nødvendig.

  • UTF-8-koding uten prosent-koding: Noen systemer bruker direkte UTF-8-koding, men dette kan føre til problemer hvis det ikke håndteres riktig.

Vurder spesifikasjonene til applikasjonen din for å velge den mest passende kodingsmetoden.

Historie

URL-koding ble introdusert med de tidlige spesifikasjonene av URL- og URI (Uniform Resource Identifier) standardene på 1990-tallet. Behovet for en konsekvent måte å kode spesialtegn på oppsto fra de mangfoldige systemene og tegnsettene som ble brukt over hele verden.

Nøkkelmilepæler inkluderer:

  • RFC 1738 (1994): Definerte URL-er og introduserte prosent-koding.

  • RFC 3986 (2005): Oppdaterte URI-syntaksen, og finjusterte reglene for koding.

Over tid har URL-koding blitt integrert i webteknologier, og sikrer pålitelig kommunikasjon på tvers av forskjellige systemer og plattformer.

Kodeeksempler

Her er eksempler på hvordan man utfører URL-koding i forskjellige programmeringsspråk:

' Excel VBA Eksempel
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
                    ' Håndtere Unicode-tegn
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

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

% Bruk:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## Ruby Eksempel
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 Eksempel
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 Eksempel
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 Eksempel
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 Eksempel
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());
        // Erstatt "+" med "%20" for mellomrom
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // Utdata: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// C# Eksempel
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 Eksempel
$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 Eksempel
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 Eksempel
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 Eksempel
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

Merk: Utdata kan variere noe avhengig av hvordan hvert språk håndterer reserverte tegn og mellomrom (f.eks. koding av mellomrom som %20 eller +).

SVG-diagram over URL-kodingprosessen

URL Koding Prosess Opprinnelig URL Identifiser spesial tegn Koding av URL Eksempel: Inndata: https://example.com/über uns Utdata: https://example.com/%C3%BCber%20uns

Sikkerhetsbetraktninger

Riktig URL-koding og dekoding er avgjørende for sikkerheten:

  • Forebygge injeksjonsangrep: Koding av brukerinput bidrar til å forhindre at ondsinnet kode blir utført, og reduserer risikoen for cross-site scripting (XSS) og SQL-injeksjon.

  • Dataintegritet: Sikrer at data overføres uten endringer eller korrupsjon.

  • Overholdelse av standarder: Å følge kodingsstandarder unngår interoperabilitetsproblemer mellom systemer.

Referanser

  1. RFC 3986 - Uniform Resource Identifier (URI): https://tools.ietf.org/html/rfc3986
  2. Hva er URL-koding og hvordan fungerer det? https://www.urlencoder.io/learn/
  3. Prosent-koding: https://en.wikipedia.org/wiki/Percent-encoding
  4. URL-standard: https://url.spec.whatwg.org/
  5. URI.escape er foreldet: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Konklusjon

URL-koding er en essensiell del av webutvikling og internettkommunikasjon. Ved å konvertere spesialtegn til et trygt format, sikrer det at URL-er tolkes riktig av nettlesere og servere, og opprettholder integriteten og sikkerheten til datatransmisjon. Dette verktøyet gir en praktisk måte å eskapere spesialtegn i URL-ene dine, noe som forbedrer kompatibiliteten og forhindrer potensielle feil eller sikkerhetsproblemer.

Tilbakemelding