Whiz Tools

URL simbolių koduotojas

URL String Escaper Tool

Įvadas

Interneto kūrimo ir komunikacijos srityje URL (Universalus išteklių lokatorius) vaidina svarbų vaidmenį identifikuojant išteklius internete. Tačiau URL turi apribojimų dėl simbolių, kuriuos gali turėti. Tam tikri simboliai turi specialias reikšmes, o kiti yra nesaugūs naudoti URL, nes gali būti neteisingai interpretuojami arba sugadinti perduodant.

URL kodavimas, dar žinomas kaip procentinis kodavimas, yra mechanizmas, skirtas specialiems simboliams konvertuoti į formatą, kuris gali būti perduodamas per internetą. Šis įrankis leidžia jums įvesti URL eilutę ir pabėgti specialius simbolius, užtikrinant, kad URL būtų galiojantis ir galėtų būti teisingai interpretuojamas interneto naršyklėse ir serveriuose.

URL kodavimo supratimas

Kas yra URL kodavimas?

URL kodavimas apima nesaugių ASCII simbolių pakeitimą simboliu %, po kurio seka du šešioliktainiai skaitmenys, atitinkantys simbolio ASCII kodą. Tai užtikrina, kad informacija būtų perduodama per internetą be pakeitimų.

Pavyzdžiui, tarp simbolių tarpas ' ' pakeičiamas į %20.

Kodėl reikalingas URL kodavimas?

URL gali būti siunčiami per internetą tik naudojant ASCII simbolių rinkinį. Kadangi URL dažnai turi simbolių, kurie yra už šio rinkinio ribų, jie turi būti konvertuojami į galiojantį ASCII formatą. URL kodavimas garantuoja, kad specialūs simboliai nesukels nepageidaujamų efektų ar klaidų interneto užklausose.

Simboliai, kuriuos reikia koduoti

Pagal RFC 3986 specifikaciją, šie simboliai yra rezervuoti URL ir turi būti procentiškai koduojami, jei jie naudojami pažodžiui:

  • Bendrieji skyrikliai: :, /, ?, #, [, ], @
  • Sub-skyrikliai: !, $, &, ', (, ), *, +, ,, ;, =

Be to, visi ne-ASCII simboliai, įskaitant simbolius Unicode, turi būti koduojami.

Kaip veikia URL kodavimas?

Kodavimo procesas

  1. Identifikuoti specialius simbolius: Analizuokite URL eilutę ir identifikuokite simbolius, kurie nėra neapibrėžti ASCII simboliai (raidės, skaičiai, -, ., _, ~).

  2. Konvertuoti į ASCII kodą: Kiekvienam specialiam simboliui gauti jo ASCII arba Unicode kodą.

  3. Konvertuoti į UTF-8 baitų seką (jei reikia): Ne-ASCII simboliams koduoti simbolį į vieną ar daugiau baitų naudojant UTF-8 kodavimą.

  4. Konvertuoti į šešioliktainį: Kiekvieną baitą konvertuoti į jo dviženklį šešioliktainį ekvivalentą.

  5. Pridėti procento simbolį: Prie kiekvieno šešioliktainio baito pridėti simbolį %.

Pavyzdys kodavimo

  • Simbolis: ' ' (tarpas)

    • ASCII kodas: 32
    • Šešioliktainis: 20
    • URL koduotas: %20
  • Simbolis: 'é'

    • UTF-8 kodavimas: 0xC3 0xA9
    • URL koduotas: %C3%A9

Kraštutiniai atvejai, kuriuos reikia apsvarstyti

  • Unicode simboliai: Ne-ASCII simboliai turi būti koduojami UTF-8 ir tada procentiškai koduojami.

  • Jau koduoti procento simboliai: Procento simboliai, kurie yra procentiniuose kodavimuose, neturi būti vėl koduojami.

  • Rezervuoti simboliai užklausų eilutėse: Tam tikri simboliai turi specialias reikšmes užklausų eilutėse ir turėtų būti koduojami, kad būtų išvengta struktūros pakeitimo.

URL dekodavimas

Kas yra URL dekodavimas?

URL dekodavimas yra priešingas URL kodavimo procesas. Jis konvertuoja procentiškai koduotus simbolius atgal į jų pradinę formą, padarydamas URL skaitomą ir interpretuojamą žmonėms ir sistemoms.

Dekodavimo procesas

  1. Identifikuoti procentinį kodavimo sekas: Raskite visus % simbolius, po kurių seka du šešioliktainiai skaitmenys URL eilutėje.

  2. Konvertuoti šešioliktainį į baitus: Išverskite kiekvieną šešioliktainį į atitinkamą baitą.

  3. Dekoduoti UTF-8 baitus (jei reikia): Daugiabaitėms sekos sujungti baitus ir dekoduoti juos naudojant UTF-8 kodavimą, kad gautumėte pradinį simbolį.

  4. Pakeisti koduotas sekas: Pakeisti procentiškai koduotas sekas dekoduotais simboliais.

Pavyzdys dekodavimo

  • Koduota: hello%20world

    • %20 verčiasi į tarpą ' '
    • Dekoduota: hello world
  • Koduota: J%C3%BCrgen

    • %C3%A4 verčiasi į 'ü' UTF-8
    • Dekoduota: Jürgen

URL dekodavimo svarba

URL dekodavimas yra būtinas apdorojant vartotojo įvestį iš URL, skaitant užklausų parametrus arba interpretuojant duomenis, gautus iš interneto užklausų. Tai užtikrina, kad iš URL išgauta informacija būtų tinkamoje, numatytoje formoje.

Naudojimo atvejai

Interneto kūrimas

  • Užklausų parametrai: Kodavimas vartotojo įvesties užklausų parametruose, kad būtų išvengta klaidų ar saugumo pažeidimų.

  • Kelio parametrai: Saugiai įtraukti dinaminę informaciją į URL kelius.

Duomenų perdavimas

  • API ir interneto paslaugos: Užtikrinant, kad API siunčiami duomenys būtų tinkamai suformatuoti.

  • Tarptautinimas: Palaikant URL su simboliais iš įvairių kalbų.

Saugumas

  • Išvengiant injekcijos atakų: Kodavimas įvestims, kad būtų sumažinta kryžminio svetainių skriptavimo (XSS) ir kitų injekcijos atakų rizika.

Alternatyvos

Nors URL kodavimas yra būtinas, yra scenarijų, kur kitų kodavimo metodų naudojimas gali būti tinkamesnis:

  • Base64 kodavimas: Naudojamas binariniams duomenims koduoti URL arba kai reikia didesnio informacijos tankio.

  • UTF-8 kodavimas be procentinio kodavimo: Kai kurios sistemos tiesiogiai naudoja UTF-8 kodavimą, tačiau tai gali sukelti problemų, jei nėra tinkamai tvarkoma.

Apsvarstykite savo programos specifiką, kad pasirinktumėte tinkamiausią kodavimo metodą.

Istorija

URL kodavimas buvo pristatytas su ankstyvosiomis URL ir URI (Universalus išteklių identifikatorius) standartų specifikacijomis 1990-aisiais. Nuolatinis būdas koduoti specialius simbolius kilo iš įvairių sistemų ir pasaulyje naudojamų simbolių rinkinių poreikio.

Pagrindiniai įvykiai:

  • RFC 1738 (1994): Apibrėžė URL ir pristatė procentinį kodavimą.

  • RFC 3986 (2005): Atnaujino URI sintaksę, patikslindamas kodavimo taisykles.

Per laiką URL kodavimas tapo integraline interneto technologijų dalimi, užtikrinančia patikimą komunikaciją tarp skirtingų sistemų ir platformų.

Kodo pavyzdžiai

Štai pavyzdžiai, kaip atlikti URL kodavimą įvairiose programavimo kalbose:

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

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

% Naudojimas:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## Ruby pavyzdys
require 'uri'

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

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

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

Pastaba: Išvestis gali šiek tiek skirtis priklausomai nuo to, kaip kiekviena kalba tvarko rezervuotus simbolius ir tarpus (pvz., koduojant tarpus kaip %20 arba +).

SVG diagrama apie URL kodavimo procesą

URL kodavimo procesas Pradinė URL Identifikuoti specialius simbolius Koduoti URL Pavyzdys: Įvestis: https://example.com/über uns Išvestis: https://example.com/%C3%BCber%20uns

Saugumo svarstymai

Tinkamas URL kodavimas ir dekodavimas yra kritiškai svarbūs saugumui:

  • Išvengiant injekcijos atakų: Kodavimas vartotojo įvesties padeda užkirsti kelią kenksmingo kodo vykdymui, mažinant kryžminio svetainių skriptavimo (XSS) ir SQL injekcijos riziką.

  • Duomenų vientisumas: Užtikrina, kad duomenys būtų perduodami be pakeitimų ar sugadinimų.

  • Atitikimas standartams: Laikymasis kodavimo standartų išvengia tarpusavio suderinamumo problemų tarp sistemų.

Nuorodos

  1. RFC 3986 - Universalus išteklių identifikatorius (URI): https://tools.ietf.org/html/rfc3986
  2. Kas yra URL kodavimas ir kaip jis veikia? https://www.urlencoder.io/learn/
  3. Procentinis kodavimas: https://en.wikipedia.org/wiki/Percent-encoding
  4. URL standartas: https://url.spec.whatwg.org/
  5. URI.escape yra pasenęs: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Išvada

URL kodavimas yra esminis interneto kūrimo ir komunikacijos aspektas. Paversdamas specialius simbolius saugiu formatu, jis užtikrina, kad URL būtų teisingai interpretuojami naršyklėse ir serveriuose, išlaikant duomenų perdavimo vientisumą ir saugumą. Šis įrankis suteikia patogų būdą pabėgti specialius simbolius jūsų URL, didinant suderinamumą ir užkertant kelią galimoms klaidoms ar saugumo pažeidimams.

Atsiliepimai