Whiz Tools

Pengkodean String URL

Alat Penerjemah URL String

Pendahuluan

Dalam dunia pengembangan web dan komunikasi Internet, URL (Uniform Resource Locators) memainkan peran penting dalam mengidentifikasi sumber daya di web. Namun, URL memiliki batasan pada karakter yang dapat mereka miliki. Karakter tertentu memiliki arti khusus, sementara yang lain tidak aman untuk digunakan dalam URL karena kemungkinan salah tafsir atau korupsi selama transmisi.

Pengkodean URL, juga dikenal sebagai percent-encoding, adalah mekanisme untuk mengonversi karakter khusus menjadi format yang dapat ditransmisikan melalui Internet. Alat ini memungkinkan Anda untuk memasukkan string URL dan menghindari karakter khusus, memastikan bahwa URL tersebut valid dan dapat diinterpretasikan dengan benar oleh browser web dan server.

Memahami Pengkodean URL

Apa itu Pengkodean URL?

Pengkodean URL melibatkan penggantian karakter ASCII yang tidak aman dengan % diikuti oleh dua digit heksadesimal yang mewakili kode ASCII karakter tersebut. Ini memastikan bahwa informasi ditransmisikan melalui Internet tanpa perubahan.

Sebagai contoh, karakter spasi ' ' diganti dengan %20.

Mengapa Pengkodean URL Diperlukan?

URL hanya dapat dikirim melalui Internet menggunakan set karakter ASCII. Karena URL sering mengandung karakter di luar set ini, mereka harus dikonversi menjadi format ASCII yang valid. Pengkodean URL menjamin bahwa karakter khusus tidak menyebabkan efek yang tidak diinginkan atau kesalahan dalam permintaan web.

Karakter yang Perlu Dikodekan

Menurut spesifikasi RFC 3986, karakter-karakter berikut adalah yang dicadangkan dalam URL dan harus dikodekan persen jika mereka akan digunakan secara literal:

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

Selain itu, karakter non-ASCII, termasuk karakter dalam Unicode, harus dikodekan.

Bagaimana Pengkodean URL Bekerja?

Proses Pengkodean

  1. Identifikasi Karakter Khusus: Analisis string URL dan identifikasi karakter yang bukan karakter ASCII yang tidak dicadangkan (huruf, angka, -, ., _, ~).

  2. Konversi ke Kode ASCII: Untuk setiap karakter khusus, dapatkan kode titik ASCII atau Unicode-nya.

  3. Konversi ke Urutan Byte UTF-8 (jika perlu): Untuk karakter non-ASCII, kodifikasi karakter menjadi satu atau lebih byte menggunakan pengkodean UTF-8.

  4. Konversi ke Heksadesimal: Konversi setiap byte ke nilai heksadesimal dua digitnya.

  5. Tambahkan Simbol Persen: Tambahkan simbol % di depan setiap byte heksadesimal.

Contoh Pengkodean

  • Karakter: ' ' (Spasi)

    • Kode ASCII: 32
    • Heksadesimal: 20
    • URL Dikodekan: %20
  • Karakter: 'é'

    • Pengkodean UTF-8: 0xC3 0xA9
    • URL Dikodekan: %C3%A9

Kasus Tepi yang Perlu Dipertimbangkan

  • Karakter Unicode: Karakter non-ASCII harus dikodekan dalam UTF-8 dan kemudian dikodekan persen.

  • Tanda Persen yang Sudah Dikodekan: Tanda persen yang merupakan bagian dari pengkodean persen tidak boleh dikodekan ulang.

  • Karakter Cadangan dalam String Kuery: Karakter tertentu memiliki arti khusus dalam string kuery dan harus dikodekan untuk mencegah perubahan struktur.

Dekode URL

Apa itu Dekode URL?

Dekode URL adalah proses kebalikan dari pengkodean URL. Ini mengonversi karakter yang dikodekan persen kembali ke bentuk aslinya, membuat URL dapat dibaca dan diinterpretasikan oleh manusia dan sistem.

Proses Dekode

  1. Identifikasi Urutan Pengkodean Persen: Temukan semua simbol % diikuti oleh dua digit heksadesimal dalam string URL.

  2. Konversi Heksadesimal ke Byte: Terjemahkan setiap nilai heksadesimal ke byte yang sesuai.

  3. Dekode Byte UTF-8 (jika perlu): Untuk urutan multi-byte, gabungkan byte dan dekode menggunakan pengkodean UTF-8 untuk mendapatkan karakter asli.

  4. Ganti Urutan yang Dikodekan: Ganti urutan yang dikodekan persen dengan karakter yang didekodekan.

Contoh Dekode

  • Dikodekan: hello%20world

    • %20 diterjemahkan menjadi spasi ' '
    • Didekodekan: hello world
  • Dikodekan: J%C3%BCrgen

    • %C3%A4 diterjemahkan menjadi 'ü' dalam UTF-8
    • Didekodekan: Jürgen

Pentingnya Dekode URL

Dekode URL penting saat memproses input pengguna dari URL, membaca parameter kuery, atau menafsirkan data yang diterima dari permintaan web. Ini memastikan bahwa informasi yang diambil dari URL berada dalam bentuk yang benar dan dimaksudkan.

Kasus Penggunaan

Pengembangan Web

  • Parameter Kuery: Mengkodekan input pengguna dalam parameter kuery untuk mencegah kesalahan atau kerentanan keamanan.

  • Parameter Jalur: Menyertakan data dinamis dengan aman dalam jalur URL.

Transmisi Data

  • API dan Layanan Web: Memastikan data yang dikirim ke API diformat dengan benar.

  • Internasionalisasi: Mendukung URL dengan karakter dari berbagai bahasa.

Keamanan

  • Mencegah Serangan Penyisipan: Mengkodekan input untuk mengurangi risiko cross-site scripting (XSS) dan serangan penyisipan lainnya.

Alternatif

Meskipun pengkodean URL sangat penting, ada skenario di mana metode pengkodean lain mungkin lebih tepat:

  • Pengkodean Base64: Digunakan untuk mengkodekan data biner dalam URL atau ketika diperlukan kepadatan informasi yang lebih tinggi.

  • Pengkodean UTF-8 tanpa Pengkodean Persen: Beberapa sistem menggunakan pengkodean UTF-8 secara langsung, tetapi ini dapat menyebabkan masalah jika tidak ditangani dengan benar.

Pertimbangkan spesifikasi aplikasi Anda untuk memilih metode pengkodean yang paling sesuai.

Sejarah

Pengkodean URL diperkenalkan dengan spesifikasi awal URL dan standar URI (Uniform Resource Identifier) pada tahun 1990-an. Kebutuhan akan cara yang konsisten untuk mengkodekan karakter khusus muncul dari sistem dan set karakter yang beragam digunakan di seluruh dunia.

Tonggak sejarah kunci meliputi:

  • RFC 1738 (1994): Mendefinisikan URL dan memperkenalkan pengkodean persen.

  • RFC 3986 (2005): Memperbarui sintaks URI, menyempurnakan aturan untuk pengkodean.

Seiring waktu, pengkodean URL telah menjadi bagian integral dari teknologi web, memastikan komunikasi yang dapat diandalkan di berbagai sistem dan platform.

Contoh Kode

Berikut adalah contoh cara melakukan pengkodean URL dalam berbagai bahasa pemrograman:

' 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 karakter 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());
        // Ganti "+" dengan "%20" untuk spasi
        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

Catatan: Output mungkin sedikit bervariasi berdasarkan bagaimana masing-masing bahasa menangani karakter cadangan dan spasi (misalnya, mengkodekan spasi sebagai %20 atau +).

Diagram SVG dari Proses Pengkodean URL

Proses Pengkodean URL URL Asli Identifikasi Khusus Karakter Kodekan URL Contoh: Input: https://example.com/über uns Output: https://example.com/%C3%BCber%20uns

Pertimbangan Keamanan

Pengkodean dan dekode URL yang tepat sangat penting untuk keamanan:

  • Mencegah Serangan Penyisipan: Mengkodekan input pengguna membantu mencegah kode berbahaya dieksekusi, mengurangi risiko seperti cross-site scripting (XSS) dan injeksi SQL.

  • Integritas Data: Memastikan bahwa data ditransmisikan tanpa perubahan atau korupsi.

  • Kepatuhan terhadap Standar: Mematuhi standar pengkodean menghindari masalah interoperabilitas antara sistem.

Referensi

  1. RFC 3986 - Uniform Resource Identifier (URI): https://tools.ietf.org/html/rfc3986
  2. Apa itu Pengkodean URL dan Bagaimana Cara Kerjanya? https://www.urlencoder.io/learn/
  3. Pengkodean Persen: https://en.wikipedia.org/wiki/Percent-encoding
  4. Standar URL: https://url.spec.whatwg.org/
  5. URI.escape sudah usang: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Kesimpulan

Pengkodean URL adalah aspek penting dari pengembangan web dan komunikasi Internet. Dengan mengonversi karakter khusus menjadi format yang aman, ini memastikan bahwa URL diinterpretasikan dengan benar oleh browser dan server, menjaga integritas dan keamanan transmisi data. Alat ini menyediakan cara yang nyaman untuk menghindari karakter khusus dalam URL Anda, meningkatkan kompatibilitas dan mencegah kesalahan atau kerentanan keamanan yang potensial.

Umpan balik