Whiz Tools

Penyandi Rentetan URL

Alat Penyelamat Tali URL

Pengenalan

Dalam bidang pembangunan web dan komunikasi Internet, URL (Penunjuk Sumber Uniform) memainkan peranan penting dalam mengenal pasti sumber di web. Walau bagaimanapun, URL mempunyai sekatan terhadap watak yang boleh mereka mengandungi. Watak tertentu mempunyai makna khas, sementara yang lain tidak selamat untuk digunakan dalam URL kerana kemungkinan salah tafsir atau kerosakan semasa penghantaran.

Penyandian URL, juga dikenali sebagai penyandian peratus, adalah mekanisme untuk menukar watak khas ke dalam format yang boleh dihantar melalui Internet. Alat ini membolehkan anda memasukkan rentetan URL dan menyelamatkan watak khas, memastikan bahawa URL adalah sah dan boleh ditafsirkan dengan betul oleh pelayar web dan pelayan.

Memahami Penyandian URL

Apa itu Penyandian URL?

Penyandian URL melibatkan penggantian watak ASCII yang tidak selamat dengan % diikuti oleh dua digit heksadesimal yang mewakili kod ASCII watak tersebut. Ia memastikan bahawa maklumat dihantar melalui Internet tanpa pengubahsuaian.

Sebagai contoh, watak ruang ' ' digantikan dengan %20.

Mengapa Penyandian URL Diperlukan?

URL hanya boleh dihantar melalui Internet menggunakan set watak ASCII. Oleh kerana URL sering mengandungi watak di luar set ini, mereka mesti ditukar ke dalam format ASCII yang sah. Penyandian URL menjamin bahawa watak khas tidak menyebabkan kesan yang tidak diingini atau ralat dalam permintaan web.

Watak yang Perlu Disandikan

Menurut spesifikasi RFC 3986, watak-watak berikut adalah terpelihara dalam URL dan mesti disandi peratus jika mereka hendak digunakan secara literal:

  • Pemisah umum: :, /, ?, #, [, ], @
  • Pemisah sub: !, $, &, ', (, ), *, +, ,, ;, =

Selain itu, sebarang watak bukan ASCII, termasuk watak dalam Unicode, mesti disandi.

Bagaimana Penyandian URL Berfungsi?

Proses Penyandian

  1. Kenal pasti Watak Khas: Analisis rentetan URL dan kenal pasti watak yang bukan watak ASCII yang tidak terpelihara (huruf, angka, -, ., _, ~).

  2. Tukar kepada Kod ASCII: Untuk setiap watak khas, peroleh titik kod ASCII atau Unicode.

  3. Tukar kepada Urutan Byte UTF-8 (jika perlu): Untuk watak bukan ASCII, sandikan watak tersebut menjadi satu atau lebih bait menggunakan penyandian UTF-8.

  4. Tukar kepada Heksadesimal: Tukar setiap bait kepada nilai heksadesimal dua digitnya.

  5. Tambahkan Simbol Peratus: Tambah setiap bait heksadesimal dengan tanda %.

Contoh Penyandian

  • Watak: ' ' (Ruang)

    • Kod ASCII: 32
    • Heksadesimal: 20
    • Disandi URL: %20
  • Watak: 'é'

    • Penyandian UTF-8: 0xC3 0xA9
    • Disandi URL: %C3%A9

Kes Khas yang Perlu Dipertimbangkan

  • Watak Unicode: Watak bukan ASCII mesti disandi dalam UTF-8 dan kemudian disandi peratus.

  • Tanda Peratus yang Sudah Disandi: Tanda peratus yang merupakan sebahagian daripada penyandian peratus tidak boleh disandi semula.

  • Watak Terpelihara dalam Rentetan Pertanyaan: Watak tertentu mempunyai makna khas dalam rentetan pertanyaan dan harus disandi untuk mengelakkan mengubah struktur.

Penyahsandian URL

Apa itu Penyahsandian URL?

Penyahsandian URL adalah proses terbalik dari penyandian URL. Ia menukar watak yang disandi peratus kembali ke bentuk asalnya, menjadikan URL boleh dibaca dan ditafsirkan oleh manusia dan sistem.

Proses Penyahsandian

  1. Kenal pasti Urutan Penyandian Peratus: Cari semua simbol % yang diikuti oleh dua digit heksadesimal dalam rentetan URL.

  2. Tukar Heksadesimal kepada Byte: Terjemahkan setiap nilai heksadesimal kepada bait yang sepadan.

  3. Tukar Byte UTF-8 (jika perlu): Untuk urutan berbilang bait, gabungkan bait tersebut dan nyahsandikan menggunakan penyandian UTF-8 untuk mendapatkan watak asal.

  4. Gantikan Urutan yang Disandi: Gantikan urutan yang disandi peratus dengan watak yang disahsandikan.

Contoh Penyahsandian

  • Disandi: hello%20world

    • %20 diterjemahkan kepada ruang ' '
    • Disahsandikan: hello world
  • Disandi: J%C3%BCrgen

    • %C3%A4 diterjemahkan kepada 'ü' dalam UTF-8
    • Disahsandikan: Jürgen

Kepentingan Penyahsandian URL

Penyahsandian URL adalah penting semasa memproses input pengguna dari URL, membaca parameter pertanyaan, atau mentafsir data yang diterima dari permintaan web. Ia memastikan bahawa maklumat yang diekstrak dari URL berada dalam bentuk yang betul dan dimaksudkan.

Kes Penggunaan

Pembangunan Web

  • Parameter Pertanyaan: Menyandikan input pengguna dalam parameter pertanyaan untuk mengelakkan ralat atau kerentanan keselamatan.

  • Parameter Jalur: Menyertakan data dinamik dalam jalur URL dengan selamat.

Penghantaran Data

  • API dan Perkhidmatan Web: Memastikan data yang dihantar ke API diformat dengan betul.

  • Internasionalisasi: Menyokong URL dengan watak dari pelbagai bahasa.

Keselamatan

  • Mencegah Serangan Suntikan: Menyandikan input untuk mengurangkan risiko skrip silang (XSS) dan serangan suntikan lain.

Alternatif

Walaupun penyandian URL adalah penting, terdapat senario di mana kaedah penyandian lain mungkin lebih sesuai:

  • Penyandian Base64: Digunakan untuk menyandikan data binari dalam URL atau apabila kepadatan maklumat yang lebih tinggi diperlukan.

  • Penyandian UTF-8 tanpa Penyandian Peratus: Sesetengah sistem menggunakan penyandian UTF-8 secara langsung, tetapi ini boleh menyebabkan isu jika tidak ditangani dengan betul.

Pertimbangkan spesifik aplikasi anda untuk memilih kaedah penyandian yang paling sesuai.

Sejarah

Penyandian URL diperkenalkan dengan spesifikasi awal URL dan standard URI (Pengenal Sumber Uniform) pada tahun 1990-an. Keperluan untuk cara yang konsisten untuk menyandikan watak khas timbul daripada sistem dan set watak yang pelbagai yang digunakan di seluruh dunia.

Peristiwa penting termasuk:

  • RFC 1738 (1994): Mendefinisikan URL dan memperkenalkan penyandian peratus.

  • RFC 3986 (2005): Mengemas kini sintaks URI, memperhalusi peraturan untuk penyandian.

Seiring berjalannya waktu, penyandian URL telah menjadi integral kepada teknologi web, memastikan komunikasi yang boleh dipercayai di antara pelbagai sistem dan platform.

Contoh Kod

Berikut adalah contoh cara melakukan penyandian URL dalam pelbagai bahasa pengaturcaraan:

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

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

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

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

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

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

Nota: Output mungkin berbeza sedikit berdasarkan cara setiap bahasa menangani watak terpelihara dan ruang (contohnya, menyandikan ruang sebagai %20 atau +).

Diagram SVG Proses Penyandian URL

Proses Penyandian URL URL Asal Kenal pasti Khas Watak Sandikan URL Contoh: Input: https://example.com/über uns Output: https://example.com/%C3%BCber%20uns

Pertimbangan Keselamatan

Penyandian dan penyahsandian URL yang betul adalah kritikal untuk keselamatan:

  • Mencegah Serangan Suntikan: Menyandikan input pengguna membantu mencegah kod berniat jahat daripada dilaksanakan, mengurangkan risiko seperti skrip silang (XSS) dan suntikan SQL.

  • Integriti Data: Memastikan bahawa data dihantar tanpa pengubahsuaian atau kerosakan.

  • Pematuhan dengan Standard: Mematuhi standard penyandian mengelakkan isu keserasian antara sistem.

Rujukan

  1. RFC 3986 - Pengenal Sumber Uniform (URI): https://tools.ietf.org/html/rfc3986
  2. Apa itu Penyandian URL dan Bagaimana ia berfungsi? https://www.urlencoder.io/learn/
  3. Penyandian Peratus: https://en.wikipedia.org/wiki/Percent-encoding
  4. Standard URL: https://url.spec.whatwg.org/
  5. URI.escape adalah usang: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Kesimpulan

Penyandian URL adalah aspek penting dalam pembangunan web dan komunikasi Internet. Dengan menukar watak khas ke dalam format yang selamat, ia memastikan bahawa URL ditafsirkan dengan betul oleh pelayar dan pelayan, mengekalkan integriti dan keselamatan penghantaran data. Alat ini menyediakan cara yang mudah untuk menyelamatkan watak khas dalam URL anda, meningkatkan keserasian dan mencegah potensi ralat atau kerentanan keselamatan.

Maklum balas