Whiz Tools

URL String Escaper

URL String Escaper Tool

Sissejuhatus

Veebiarenduse ja Interneti suhtluse valdkonnas mängivad URL-id (Uniform Resource Locators) olulist rolli veebis ressursside tuvastamisel. Siiski on URL-idel piirangud nende sisaldatavate märkide osas. Teatud märgid omavad erilisi tähendusi, samas kui teised on URL-ides kasutamiseks ohtlikud, kuna need võivad edastamise käigus valesti tõlgendada või rikutud saada.

URL-i kodeerimine, tuntud ka kui protsendi kodeerimine, on mehhanism, mis muundab erimärgid formaati, mida saab Internetis edastada. See tööriist võimaldab teil sisestada URL-i stringi ja põgeneda erimärkide eest, tagades, et URL on kehtiv ja seda tõlgendatakse õigesti veebibrauserite ja serverite poolt.

URL-i kodeerimise mõistmine

Mis on URL-i kodeerimine?

URL-i kodeerimine hõlmab ohutute ASCII märkide asendamist % järgnevate kahe kuueteistkümnendiku numbriga, mis esindab märgi ASCII koodi. See tagab, et teave edastatakse Internetis muutumatuna.

Näiteks, tühik märk ' ' asendatakse %20.

Miks on URL-i kodeerimine vajalik?

URL-e saab Internetis edastada ainult ASCII märgistikuga. Kuna URL-id sisaldavad sageli märke, mis jäävad sellest komplektist välja, peavad need olema muudetud kehtivaks ASCII formaadiks. URL-i kodeerimine tagab, et erimärgid ei põhjusta soovimatuid efekte või vigu veebipäringutes.

Märgid, mis vajavad kodeerimist

Vastavalt RFC 3986 spetsifikatsioonile peavad järgmised märgid olema URL-ides reservitud ja neid tuleb protsendi kodeerimisega asendada, kui neid soovitakse kasutada sõnaselgelt:

  • Üldised eraldajad: :, /, ?, #, [, ], @
  • Alam-eraldajad: !, $, &, ', (, ), *, +, ,, ;, =

Lisaks tuleb kodeerida kõik mitte-ASCII märgid, sealhulgas Unicode'i märke.

Kuidas URL-i kodeerimine töötab?

Kodeerimise protsess

  1. Tuvasta erimärgid: Analüüsi URL-i stringi ja tuvastage märgid, mis ei ole mitte-reservitud ASCII märgid (tähed, numbrid, -, ., _, ~).

  2. Muuda ASCII koodiks: Iga erimärgi jaoks hankige selle ASCII või Unicode koodipunkt.

  3. Muuda UTF-8 baitide järjestuseks (kui vajalik): Mitte-ASCII märkide jaoks kodeerige märk ühte või mitmesse bitti, kasutades UTF-8 kodeerimist.

  4. Muuda kuueteistkümnendikuks: Muutke iga bitti selle kahe-kümne kuueteistkümnendiku vastavuseks.

  5. Eelnege protsendi sümboliga: Eelnege iga kuueteistkümnendiku bait % märgiga.

Näide kodeerimisest

  • Märk: ' ' (Tühik)

    • ASCII kood: 32
    • Kuueteistkümnendik: 20
    • URL-i kodeeritud: %20
  • Märk: 'é'

    • UTF-8 kodeerimine: 0xC3 0xA9
    • URL-i kodeeritud: %C3%A9

Äärmuslikud juhtumid, mida arvesse võtta

  • Unicode märgid: Mitte-ASCII märgid peavad olema kodeeritud UTF-8-s ja seejärel protsendi kodeeritud.

  • Juba kodeeritud protsendi märgid: Protsendi märgid, mis on osa protsendi kodeeringutest, ei tohi uuesti kodeerida.

  • Reservitud märgid päringute stringides: Teatud märgid omavad päringute stringides erilisi tähendusi ja neid tuleks kodeerida, et vältida struktuuri muutmist.

URL-i dekodeerimine

Mis on URL-i dekodeerimine?

URL-i dekodeerimine on URL-i kodeerimise vastupidine protsess. See muundab protsendi kodeeritud märgid tagasi nende algsesse vormi, muutes URL-i loetavaks ja tõlgendatavaks inimestele ja süsteemidele.

Dekodeerimise protsess

  1. Tuvasta protsendi kodeerimise järjestused: Otsi kõiki % sümboleid, millele järgneb kaks kuueteistkümnendikku URL-i stringis.

  2. Muuda kuueteistkümendikud baitideks: Tõlgi iga kuueteistkümnendiku väärtus vastavaks baitideks.

  3. Dekodeeri UTF-8 baitideks (kui vajalik): Mitme baiti järjestuste jaoks ühenda bitid ja dekodeeri need UTF-8 kodeerimisega, et saada algne märk.

  4. Asenda kodeeritud järjestused: Asenda protsendi kodeeritud järjestused dekodeeritud märkidega.

Näide dekodeerimisest

  • Kodeeritud: hello%20world

    • %20 tõlgitakse tühikuks ' '
    • Dekodeeritud: hello world
  • Kodeeritud: J%C3%BCrgen

    • %C3%A4 tõlgitakse 'ü' UTF-8-s
    • Dekodeeritud: Jürgen

URL-i dekodeerimise tähtsus

URL-i dekodeerimine on hädavajalik, kui töödeldakse kasutaja sisendit URL-idest, loetakse päringute parameetreid või tõlgendatakse andmeid, mis saadakse veebipäringutest. See tagab, et URL-ist saadud teave on oma õiges, kavandatud vormis.

Kasutusalad

Veebiarendus

  • Päringute parameetrid: Kasutaja sisendi kodeerimine päringute parameetrites, et vältida vigu või turvaprobleeme.

  • Teepäringud: Dynaamilise andmete ohutu lisamine URL-i teedesse.

Andmete edastamine

  • API-d ja veebiteenused: Tagamaks, et API-dele saadetud andmed on korralikult vormindatud.

  • Rahvusvaheline kasutamine: Toetades URL-e, mis sisaldavad erinevate keelte märke.

Turvalisus

  • Rünnakute vältimine: Sisendi kodeerimine aitab vähendada rist-saidirünnakute (XSS) ja teiste rünnakute riski.

Alternatiivid

Kuigi URL-i kodeerimine on hädavajalik, on olukordi, kus muud kodeerimismeetodid võivad olla sobivamad:

  • Base64 kodeerimine: Kasutatakse binaarsete andmete kodeerimiseks URL-ides või kui on vajalik suurem teabe tihedus.

  • UTF-8 kodeerimine ilma protsendi kodeerimiseta: Mõned süsteemid kasutavad otse UTF-8 kodeerimist, kuid see võib põhjustada probleeme, kui seda ei käsitleta õigesti.

Kaaluda tuleks teie rakenduse spetsiifikat, et valida kõige sobivam kodeerimismeetod.

Ajalugu

URL-i kodeerimine tutvustati URL-i ja URI (Uniform Resource Identifier) standardite varajastes spetsifikatsioonides 1990. aastatel. Ühtse viisi loomise vajadus erimärkide kodeerimiseks tekkis mitmekesiste süsteemide ja maailmas kasutatavate märgistikute tõttu.

Olulised verstapostid hõlmavad:

  • RFC 1738 (1994): Määratles URL-id ja tutvustas protsendi kodeerimist.

  • RFC 3986 (2005): Uuendas URI süntaksit, täpsustades kodeerimise reegleid.

Aja jooksul on URL-i kodeerimisest saanud veebitehnoloogiate lahutamatu osa, tagades usaldusväärse suhtluse erinevate süsteemide ja platvormide vahel.

Koodinäited

Siin on näited, kuidas URL-i kodeerimist teostada erinevates programmeerimiskeeltes:

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

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

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

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

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

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

Märkus: Väljund võib veidi varieeruda sõltuvalt sellest, kuidas iga keel käsitleb reservitud märke ja tühikuid (nt, kodeerides tühikuid kui %20 või +).

SVG diagramm URL-i kodeerimise protsessist

URL-i kodeerimise protsess Algne URL Tuvasta erimärgid Kodeeri URL Näide: Sisend: https://example.com/über uns Väljund: https://example.com/%C3%BCber%20uns

Turvalisuse kaalutlused

Korralik URL-i kodeerimine ja dekodeerimine on kriitilise tähtsusega turvalisuse tagamiseks:

  • Rünnakute vältimine: Kasutaja sisendi kodeerimine aitab vältida pahatahtliku koodi täitmist, vähendades riske nagu rist-saidirünnakud (XSS) ja SQL süstimine.

  • Andmete terviklikkus: Tagab, et andmeid edastatakse muutumatuna või rikutud.

  • Standarditega vastavus: Kodeerimisstandardite järgimine väldib süsteemide vahelisi ühilduvusprobleeme.

Viidatud allikad

  1. RFC 3986 - Ühtne ressurssi identifikaator (URI): https://tools.ietf.org/html/rfc3986
  2. Mis on URL-i kodeerimine ja kuidas see töötab? https://www.urlencoder.io/learn/
  3. Protsendi kodeerimine: https://en.wikipedia.org/wiki/Percent-encoding
  4. URL-i standard: https://url.spec.whatwg.org/
  5. URI.escape on aegunud: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Järeldus

URL-i kodeerimine on veebiarenduse ja Interneti suhtluse oluline aspekt. Muundades erimärgid ohutuks formaadiks, tagab see, et URL-e tõlgendatakse õigesti brauserite ja serverite poolt, säilitades andmete edastamise terviklikkuse ja turvalisuse. See tööriist pakub mugavat viisi erimärkide põgenemiseks URL-ides, suurendades ühilduvust ja vältides võimalikke vigu või turvaprobleeme.

Tagasiside