Whiz Tools

Alat za kodiranje URL niza

Alat za Escapiranje URL Nizova

Uvod

U području web razvoja i internetskih komunikacija, URL-ovi (Uniform Resource Locators) igraju ključnu ulogu u identifikaciji resursa na webu. Međutim, URL-ovi imaju ograničenja u pogledu znakova koje mogu sadržavati. Određeni znakovi imaju posebna značenja, dok su drugi nesigurni za upotrebu u URL-ovima zbog mogućnosti pogrešne interpretacije ili korupcije tijekom prijenosa.

Kodiranje URL-a, poznato i kao percent-encoding, mehanizam je za pretvaranje posebnih znakova u format koji se može prenijeti putem Interneta. Ovaj alat vam omogućuje da unesete URL niz i escapirate posebne znakove, osiguravajući da URL bude valjan i da ga web preglednici i poslužitelji ispravno interpretiraju.

Razumijevanje Kodiranja URL-a

Što je Kodiranje URL-a?

Kodiranje URL-a uključuje zamjenu nesigurnih ASCII znakova s % praćenim s dva heksadecimalna znamenka koja predstavljaju ASCII kod tog znaka. Osigurava da se informacije prenose putem Interneta bez promjena.

Na primjer, znak razmaka ' ' zamjenjuje se s %20.

Zašto je Kodiranje URL-a Neophodno?

URL-ovi se mogu slati putem Interneta koristeći samo ASCII skup znakova. Budući da URL-ovi često sadrže znakove izvan ovog skupa, moraju se pretvoriti u valjani ASCII format. Kodiranje URL-a jamči da posebni znakovi ne uzrokuju neželjene efekte ili greške u web zahtjevima.

Znakovi koji Trebaju Kodiranje

Prema RFC 3986 specifikaciji, sljedeći znakovi su rezervirani u URL-ovima i moraju biti percent-encoded ako se koriste doslovno:

  • Opći delimitatori: :, /, ?, #, [, ], @
  • Pod-delimitatori: !, $, &, ', (, ), *, +, ,, ;, =

Osim toga, svi ne-ASCII znakovi, uključujući znakove u Unicode-u, moraju biti kodirani.

Kako Funkcionira Kodiranje URL-a?

Proces Kodiranja

  1. Identificirajte Posebne Znakove: Parsirajte URL niz i identificirajte znakove koji nisu ne rezervirani ASCII znakovi (slova, brojevi, -, ., _, ~).

  2. Pretvorite u ASCII Kod: Za svaki posebni znak, dobijte njegov ASCII ili Unicode kod.

  3. Pretvorite u UTF-8 Bajt Sekvencu (ako je potrebno): Za ne-ASCII znakove, kodirajte znak u jedan ili više bajtova koristeći UTF-8 kodiranje.

  4. Pretvorite u Heksadecimalni: Pretvorite svaki bajt u njegov heksadecimalni ekvivalent od dva znamenka.

  5. Dodajte Postotak Simbol: Precedite svaki heksadecimalni bajt s % znakom.

Primjer Kodiranja

  • Znak: ' ' (Razmak)

    • ASCII Kod: 32
    • Heksadecimalni: 20
    • URL Kodiran: %20
  • Znak: 'é'

    • UTF-8 Kodiranje: 0xC3 0xA9
    • URL Kodiran: %C3%A9

Rubne Situacije koje Treba Razmotriti

  • Unicode Znakovi: Ne-ASCII znakovi moraju biti kodirani u UTF-8 i zatim percent-encoded.

  • Već Kodirani Postotni Simboli: Postotni simboli koji su dio percent-encoding ne smiju se ponovo kodirati.

  • Rezervirani Znakovi u Upitnim Nizovima: Određeni znakovi imaju posebna značenja u upitnim nizovima i trebaju biti kodirani kako bi se spriječilo izmjenjivanje strukture.

Dekodiranje URL-a

Što je Dekodiranje URL-a?

Dekodiranje URL-a je obrnuti proces kodiranja URL-a. Pretvara percent-encoded znakove natrag u njihov izvorni oblik, čineći URL čitljivim i interpretabilnim za ljude i sustave.

Proces Dekodiranja

  1. Identificirajte Postotne Kodirane Sekvence: Pronađite sve % simbole praćene s dva heksadecimalna znamenka u URL nizu.

  2. Pretvorite Heksadecimalno u Bajtove: Prevedite svaku heksadecimalnu vrijednost u njen odgovarajući bajt.

  3. Dekodirajte UTF-8 Bajtove (ako je potrebno): Za višebajtne sekvence, spojite bajtove i dekodirajte ih koristeći UTF-8 kodiranje kako biste dobili izvorni znak.

  4. Zamijenite Kodirane Sekvence: Zamijenite percent-encoded sekvence s dekodiranim znakovima.

Primjer Dekodiranja

  • Kodirano: hello%20world

    • %20 prevodi se u razmak ' '
    • Dekodirano: hello world
  • Kodirano: J%C3%BCrgen

    • %C3%A4 prevodi se u 'ü' u UTF-8
    • Dekodirano: Jürgen

Važnost Dekodiranja URL-a

Dekodiranje URL-a je ključno prilikom obrade korisničkog unosa iz URL-ova, čitanja upitnih parametara ili interpretacije podataka primljenih iz web zahtjeva. Osigurava da su informacije izvučene iz URL-a u svom ispravnom, namijenjenom obliku.

Upotrebe

Web Razvoj

  • Upitni Parametri: Kodiranje korisničkog unosa u upitnim parametrima kako bi se spriječile greške ili sigurnosne ranjivosti.

  • Putni Parametri: Sigurno uključivanje dinamičkih podataka u URL putanjama.

Prijenos Podataka

  • API-ji i Web Servisi: Osiguravanje da su podaci poslani API-ima ispravno formatirani.

  • Internacionalizacija: Podrška URL-ovima s znakovima iz raznih jezika.

Sigurnost

  • Sprječavanje Napada Injekcijom: Kodiranje unosa za smanjenje rizika od napada tipa cross-site scripting (XSS) i drugih napada injekcijom.

Alternativa

Iako je kodiranje URL-a neophodno, postoje situacije u kojima bi druge metode kodiranja mogle biti prikladnije:

  • Base64 Kodiranje: Koristi se za kodiranje binarnih podataka unutar URL-ova ili kada je potrebna veća gustoća informacija.

  • UTF-8 Kodiranje bez Percent-Encoding: Neki sustavi koriste UTF-8 kodiranje izravno, ali to može dovesti do problema ako se ne obrađuje ispravno.

Razmotrite specifičnosti vaše aplikacije kako biste odabrali najprikladniju metodu kodiranja.

Povijest

Kodiranje URL-a uvedeno je s ranim specifikacijama URL-a i URI (Uniform Resource Identifier) standarda 1990-ih. Potreba za dosljednim načinom kodiranja posebnih znakova proizašla je iz raznolikih sustava i skupova znakova koji se koriste širom svijeta.

Ključne prekretnice uključuju:

  • RFC 1738 (1994): Definira URL-ove i uvodi percent-encoding.

  • RFC 3986 (2005): Ažurira URI sintaksu, usavršavajući pravila za kodiranje.

S vremenom, kodiranje URL-a postalo je sastavni dio web tehnologija, osiguravajući pouzdanu komunikaciju između različitih sustava i platformi.

Primjeri Koda

Evo primjera kako izvršiti kodiranje URL-a u raznim programskim jezicima:

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

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

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

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

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

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

Napomena: Ispis se može malo razlikovati ovisno o tome kako svaki jezik obrađuje rezervirane znakove i razmake (npr., kodiranje razmaka kao %20 ili +).

SVG Dijagram Procesa Kodiranja URL-a

Proces Kodiranja URL-a Izvorni URL Identificirajte Posebne Znakove Kodirajte URL Primjer: Ulaz: https://example.com/über uns Izlaz: https://example.com/%C3%BCber%20uns

Sigurnosna Razmatranja

Ispravno kodiranje i dekodiranje URL-a su kritični za sigurnost:

  • Sprječavanje Napada Injekcijom: Kodiranje korisničkog unosa pomaže u sprječavanju izvršavanja zloćudnog koda, smanjujući rizike poput cross-site scripting (XSS) i SQL injekcija.

  • Integritet Podataka: Osigurava da se podaci prenose bez promjena ili korupcije.

  • Usaglašenost sa Standardima: Poštivanje kodirajućih standarda izbjegava probleme s interoperabilnošću između sustava.

Reference

  1. RFC 3986 - Uniform Resource Identifier (URI): https://tools.ietf.org/html/rfc3986
  2. Što je Kodiranje URL-a i Kako Funkcionira? https://www.urlencoder.io/learn/
  3. Percent-encoding: https://en.wikipedia.org/wiki/Percent-encoding
  4. URL Standard: https://url.spec.whatwg.org/
  5. URI.escape je zastarjela: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Zaključak

Kodiranje URL-a je bitan aspekt web razvoja i internetskih komunikacija. Pretvaranjem posebnih znakova u siguran format, osigurava da URL-ovi budu ispravno interpretirani od strane preglednika i poslužitelja, održavajući integritet i sigurnost prijenosa podataka. Ovaj alat pruža praktičan način za escapiranje posebnih znakova u vašim URL-ovima, poboljšavajući kompatibilnost i sprječavajući potencijalne greške ili sigurnosne ranjivosti.

Povratne informacije