Whiz Tools

URL-merkkijonon koodaus

URL-merkkijonon pakkaustyökalu

Johdanto

Verkko-ohjelmoinnissa ja Internet-viestinnässä URL-osoitteet (Uniform Resource Locators) ovat keskeisessä roolissa verkkosivustojen resurssien tunnistamisessa. Kuitenkin URL-osoitteilla on rajoituksia niiden sisältämille merkeille. Tietyillä merkeillä on erityisiä merkityksiä, kun taas toiset ovat vaarallisia käytettäväksi URL-osoitteissa, koska ne voivat aiheuttaa väärinymmärryksiä tai vahinkoja siirron aikana.

URL-koodaus, jota kutsutaan myös prosenttikoodaukseksi, on mekanismi erikoismerkkien muuntamiseksi muotoon, jota voidaan siirtää Internetin yli. Tämä työkalu mahdollistaa URL-merkkijonon syöttämisen ja erikoismerkkien pakkaamisen, varmistaen, että URL on voimassa ja voidaan tulkita oikein verkkoselaimissa ja palvelimissa.

URL-koodauksen ymmärtäminen

Mikä on URL-koodaus?

URL-koodauksessa vaihdetaan vaaralliset ASCII-merkit prosenttimerkillä %, jota seuraa kaksi heksadesimaalista numeroa, jotka edustavat merkin ASCII-koodia. Se varmistaa, että tietoa siirretään Internetin yli ilman muutoksia.

Esimerkiksi, väliavainmerkki ' ' vaihdetaan %20:ksi.

Miksi URL-koodaus on tarpeen?

URL-osoitteet voidaan lähettää Internetin yli vain ASCII-merkkijonona. Koska URL-osoitteet sisältävät usein merkkejä, jotka ovat tämän joukon ulkopuolella, ne on muunnettava voimassa olevaan ASCII-muotoon. URL-koodaus varmistaa, että erikoismerkit eivät aiheuta tahattomia vaikutuksia tai virheitä verkkopyynnöissä.

Merkit, jotka tarvitsevat koodausta

RFC 3986 -määritelmän mukaan seuraavat merkit ovat varattuja URL-osoitteissa ja ne on prosenttikoodattava, jos niitä käytetään kirjaimellisesti:

  • Yleiset erottimet: :, /, ?, #, [, ], @
  • Aluerottimet: !, $, &, ', (, ), *, +, ,, ;, =

Lisäksi kaikki ei-ASCII-merkit, mukaan lukien Unicode-merkit, on koodattava.

Kuinka URL-koodaus toimii?

Koodausprosessi

  1. Tunnista erikoismerkit: Analysoi URL-merkkijono ja tunnista merkit, jotka eivät ole sallittuja ASCII-merkkejä (kirjaimet, numerot, -, ., _, ~).

  2. Muunna ASCII-koodiksi: Jokaiselle erikoismerkille saadaan sen ASCII- tai Unicode-koodipiste.

  3. Muunna UTF-8-bittijonoksi (tarvittaessa): Ei-ASCII-merkkejä varten koodaa merkki yhdeksi tai useammaksi tavuksi käyttäen UTF-8-koodausta.

  4. Muunna heksadesimaaliseksi: Muunna jokainen tavu sen kahden numeron heksadesimaalimuotoon.

  5. Lisää prosenttimerkki eteen: Edellä mainitun heksadesimaalibitin eteen lisätään %-merkki.

Esimerkki koodauksesta

  • Merkki: ' ' (Väliavain)

    • ASCII-koodi: 32
    • Heksadesimaali: 20
    • URL-koodattu: %20
  • Merkki: 'é'

    • UTF-8-koodaus: 0xC3 0xA9
    • URL-koodattu: %C3%A9

Rajatapaukset, jotka on otettava huomioon

  • Unicode-merkit: Ei-ASCII-merkit on koodattava UTF-8-muotoon ja sitten prosenttikoodattava.

  • Jo koodatut prosenttimerkit: Prosenttimerkit, jotka ovat osa prosenttikoodauksia, eivät saa olla uudelleen koodattuja.

  • Varatut merkit kyselymerkkijonoissa: Tietyillä merkeillä on erityisiä merkityksiä kyselymerkkijonoissa ja ne on koodattava estämään rakenteen muuttuminen.

URL-purku

Mikä on URL-purku?

URL-purku on URL-koodauksen käänteinen prosessi. Se muuntaa prosenttikoodatut merkit takaisin alkuperäiseen muotoonsa, mikä tekee URL-osoitteesta luettavan ja tulkittavan ihmisille ja järjestelmille.

Purkuprosessi

  1. Tunnista prosenttikoodausjaksot: Etsi kaikki %-merkit, joita seuraavat kaksi heksadesimaalista numeroa URL-merkkijonosta.

  2. Muunna heksadesimaali tavuiksi: Käännä jokainen heksadesimaalinen arvo vastaavaksi tavuksi.

  3. Purku UTF-8-tavuista (tarvittaessa): Usean tavun sekvenssejä varten yhdistä tavut ja pura ne UTF-8-koodauksella saadaksesi alkuperäisen merkin.

  4. Korvaa koodatut jaksot: Korvaa prosenttikoodatut jaksot puretuilla merkeillä.

Esimerkki purkamisesta

  • Koodattu: hello%20world

    • %20 kääntyy väliavainmerkiksi ' '
    • Purettu: hello world
  • Koodattu: J%C3%BCrgen

    • %C3%A4 kääntyy 'ü':ksi UTF-8:ssa
    • Purettu: Jürgen

URL-purku merkitys

URL-purku on välttämätöntä käsiteltäessä käyttäjän syötteitä URL-osoitteista, luettaessa kyselyparametreja tai tulkittaessa verkkopyynnöistä saatua dataa. Se varmistaa, että URL-osoitteesta poimittu tieto on oikeassa, tarkoitetussa muodossa.

Käyttötapaukset

Verkkokehitys

  • Kyselyparametrit: Käyttäjän syötteen koodaus kyselyparametreissa virheiden tai turvallisuusongelmien estämiseksi.

  • Polkuparametrit: Dynaamisen datan turvallinen sisällyttäminen URL-polkuun.

Datan siirto

  • API:t ja verkkopalvelut: Varmistaa, että API:lle lähetetty data on oikein muotoiltu.

  • Kansainvälistäminen: Tukea URL-osoitteille, joissa on eri kielistä peräisin olevia merkkejä.

Turvallisuus

  • Injektiotaitojen estäminen: Syötteiden koodaus auttaa vähentämään riskiä, kuten verkkosivustojen skriptihyökkäyksiä (XSS) ja muita injektiovaaroja.

Vaihtoehdot

Vaikka URL-koodaus on olennainen, on olemassa tilanteita, joissa muut koodausmenetelmät voivat olla sopivampia:

  • Base64-koodaus: Käytetään binääridatan koodaamiseen URL-osoitteissa tai kun tarvitaan suurempaa tietotiheyttä.

  • UTF-8-koodaus ilman prosenttikoodausta: Jotkut järjestelmät käyttävät suoraan UTF-8-koodausta, mutta tämä voi aiheuttaa ongelmia, ellei sitä käsitellä oikein.

Ota huomioon sovelluksesi erityispiirteet valitaksesi sopivimman koodausmenetelmän.

Historia

URL-koodaus otettiin käyttöön URL- ja URI (Uniform Resource Identifier) -standardien varhaisissa määritelmissä 1990-luvulla. Tarve johdonmukaiselle tavalta koodata erikoismerkkejä syntyi eri järjestelmien ja merkkijoukkojen moninaisuudesta, joita käytettiin maailmanlaajuisesti.

Tärkeitä virstanpylväitä ovat:

  • RFC 1738 (1994): Määritteli URL-osoitteet ja esitteli prosenttikoodauksen.

  • RFC 3986 (2005): Päivitti URI-syntaksin ja tarkensi koodaus sääntöjä.

Ajan myötä URL-koodauksesta on tullut olennainen osa verkkoteknologioita, mikä varmistaa luotettavan viestinnän eri järjestelmien ja alustojen välillä.

Koodiesimerkit

Tässä on esimerkkejä URL-koodauksen suorittamisesta eri ohjelmointikielillä:

' Excel VBA Esimerkki
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
                    ' Käsittele Unicode-merkkejä
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

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

% Käyttö:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## Ruby Esimerkki
require 'uri'

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = URI::DEFAULT_PARSER.escape(url)
puts encoded_url
## Tuloste: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Rust Esimerkki
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);
    // Tuloste: 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 Esimerkki
import urllib.parse

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = urllib.parse.quote(url, safe=':/?&=')
print(encoded_url)
## Tuloste: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// JavaScript Esimerkki
const url = 'https://example.com/path?query=hello world&name=Jürgen';
const encodedURL = encodeURI(url);
console.log(encodedURL);
// Tuloste: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Java Esimerkki
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());
        // Korvaa "+" merkillä "%20" väliavainmerkeille
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // Tuloste: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// C# Esimerkki
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);
        // Tuloste: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
    }
}
<?php
// PHP Esimerkki
$url = 'https://example.com/path?query=hello world&name=Jürgen';
$encodedURL = urlencode($url);
echo $encodedURL;
// Tuloste: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%C3%BCrgen
?>
// Go Esimerkki
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)
    // Tuloste: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%25C3%25BCrgen
}
// Swift Esimerkki
import Foundation

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

Huom: Tuloste voi vaihdella hieman sen mukaan, miten kukin kieli käsittelee varattuja merkkejä ja väliavainmerkkejä (esim. koodaa väliavainmerkkejä %20 tai +).

SVG-diagrammi URL-koodausprosessista

URL-koodausprosessi Alkuperäinen URL Tunnista erikois merkit Koodaa URL Esimerkki: Syöte: https://example.com/über uns Tuloste: https://example.com/%C3%BCber%20uns

Turvallisuusnäkökohdat

Oikea URL-koodaus ja -purku ovat kriittisiä turvallisuuden kannalta:

  • Injektiotaitojen estäminen: Syötteiden koodaus auttaa estämään haitallisen koodin suorittamisen, vähentäen riskejä, kuten verkkosivustojen skriptihyökkäyksiä (XSS) ja SQL-injektioita.

  • Datan eheys: Varmistaa, että dataa siirretään ilman muutoksia tai vahinkoja.

  • Standardien noudattaminen: Koodausstandardien noudattaminen estää yhteensopivuusongelmia järjestelmien välillä.

Viitteet

  1. RFC 3986 - Uniform Resource Identifier (URI): https://tools.ietf.org/html/rfc3986
  2. Mikä on URL-koodaus ja miten se toimii? https://www.urlencoder.io/learn/
  3. Prosenttikoodaus: https://en.wikipedia.org/wiki/Percent-encoding
  4. URL-standardi: https://url.spec.whatwg.org/
  5. URI.escape on vanhentunut: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Yhteenveto

URL-koodaus on olennainen osa verkkokehitystä ja Internet-viestintää. Muuntamalla erikoismerkit turvalliseen muotoon se varmistaa, että URL-osoitteet tulkitaan oikein selaimissa ja palvelimissa, säilyttäen tiedonsiirron eheyden ja turvallisuuden. Tämä työkalu tarjoaa kätevän tavan pakata erikoismerkit URL-osoitteissasi, parantaen yhteensopivuutta ja estäen mahdollisia virheitä tai turvallisuusongelmia.

Palaute