Whiz Tools

URL Dize Kaçırıcı

URL Dize Kaçırıcı Aracı

Giriş

Web geliştirme ve İnternet iletişiminde URL'ler (Uniform Resource Locators - Tekdüzen Kaynak Bulucular) web üzerindeki kaynakları tanımlamada kritik bir rol oynar. Ancak, URL'lerin içerebileceği karakterler üzerinde kısıtlamalar vardır. Belirli karakterlerin özel anlamları vardır, diğerleri ise iletim sırasında yanlış yorumlanma veya bozulma olasılığı nedeniyle URL'lerde güvenli değildir.

URL kodlaması, aynı zamanda yüzde kodlaması olarak da bilinir, özel karakterleri İnternet üzerinden iletilebilecek bir formata dönüştürmek için kullanılan bir mekanizmadır. Bu araç, bir URL dizesi girmenize ve özel karakterleri kaçırmanıza olanak tanır, böylece URL'nin geçerli olmasını ve web tarayıcıları ve sunucular tarafından doğru bir şekilde yorumlanmasını sağlar.

URL Kodlamasını Anlamak

URL Kodlaması Nedir?

URL kodlaması, güvenli olmayan ASCII karakterlerini % işareti ve karakterin ASCII kodunu temsil eden iki onaltılı rakam ile değiştirmeyi içerir. Bu, bilginin İnternet üzerinden değiştirilmeden iletilmesini garanti eder.

Örneğin, boşluk karakteri ' ' %20 ile değiştirilir.

URL Kodlaması Neden Gereklidir?

URL'ler yalnızca ASCII karakter seti kullanılarak İnternet üzerinden gönderilebilir. URL'ler genellikle bu setin dışındaki karakterleri içerdiğinden, geçerli bir ASCII formatına dönüştürülmeleri gerekir. URL kodlaması, özel karakterlerin web isteklerinde istenmeyen etkiler veya hatalar yaratmasını önler.

Kodlanması Gereken Karakterler

RFC 3986 spesifikasyonuna göre, URL'lerde rezerve edilmiş olan ve kelime anlamıyla kullanılmaları gerekiyorsa yüzde kodlaması yapılması gereken karakterler şunlardır:

  • Genel ayırıcılar: :, /, ?, #, [, ], @
  • Alt ayırıcılar: !, $, &, ', (, ), *, +, ,, ;, =

Ayrıca, Unicode'daki dahil olmak üzere, ASCII dışındaki herhangi bir karakter de kodlanmalıdır.

URL Kodlaması Nasıl Çalışır?

Kodlama Süreci

  1. Özel Karakterleri Belirle: URL dizesini ayrıştırın ve rezerve edilmemiş ASCII karakterleri (harfler, rakamlar, -, ., _, ~) olmayan karakterleri belirleyin.

  2. ASCII Koduna Dönüştür: Her özel karakter için ASCII veya Unicode kod noktasını alın.

  3. UTF-8 Bayt Dizisine Dönüştür (gerekirse): ASCII dışındaki karakterler için, karakteri bir veya daha fazla bayta UTF-8 kodlaması kullanarak kodlayın.

  4. Onaltılıya Dönüştür: Her baytı iki haneli onaltılı karşılığına dönüştürün.

  5. Yüzde Sembolü ile Ön Ekleyin: Her onaltılı baytın önüne % işareti ekleyin.

Örnek Kodlama

  • Karakter: ' ' (Boşluk)

    • ASCII Kodu: 32
    • Onaltılı: 20
    • URL Kodlanmış: %20
  • Karakter: 'é'

    • UTF-8 Kodlaması: 0xC3 0xA9
    • URL Kodlanmış: %C3%A9

Dikkate Alınması Gereken Kenar Durumlar

  • Unicode Karakterler: ASCII dışındaki karakterler UTF-8'de kodlanmalı ve ardından yüzde kodlaması yapılmalıdır.

  • Zaten Kodlanmış Yüzde İşaretleri: Yüzde işaretleri, yüzde kodlamaları parçası olduğunda yeniden kodlanmamalıdır.

  • Sorgu Dize İçindeki Rezerve Edilmiş Karakterler: Belirli karakterler sorgu dizelerinde özel anlamlara sahiptir ve yapıyı değiştirmemek için kodlanmalıdır.

URL Çözme

URL Çözme Nedir?

URL çözme, URL kodlamasının ters sürecidir. Yüzde kodlaması yapılmış karakterleri orijinal biçimlerine geri döndürerek URL'yi okunabilir ve insanlar ile sistemler tarafından yorumlanabilir hale getirir.

Çözme Süreci

  1. Yüzde Kodlama Dizilerini Belirle: URL dizesindeki tüm % sembollerini ve ardından gelen iki onaltılı rakamı bulun.

  2. Onaltılıyı Baytlara Dönüştür: Her onaltılı değeri karşılık gelen bayta çevirin.

  3. UTF-8 Baytlarını Çöz (gerekirse): Çok baytlı diziler için, baytları birleştirin ve orijinal karakteri elde etmek için UTF-8 kodlaması kullanarak çözün.

  4. Kodlanmış Dizileri Değiştir: Yüzde kodlaması yapılmış dizileri, çözülmüş karakterlerle değiştirin.

Örnek Çözme

  • Kodlanmış: hello%20world

    • %20 bir boşluğa ' ' dönüşür
    • Çözülmüş: hello world
  • Kodlanmış: J%C3%BCrgen

    • %C3%A4 UTF-8'de 'ü' ye dönüşür
    • Çözülmüş: Jürgen

URL Çözmenin Önemi

URL çözme, URL'lerden kullanıcı girişlerini işlerken, sorgu parametrelerini okurken veya web isteklerinden alınan verileri yorumlarken gereklidir. URL'den çıkarılan bilginin doğru, niyet edilen biçimde olmasını sağlar.

Kullanım Durumları

Web Geliştirme

  • Sorgu Parametreleri: Hataları veya güvenlik açıklarını önlemek için sorgu parametrelerindeki kullanıcı girişlerini kodlama.

  • Yol Parametreleri: URL yollarında dinamik verileri güvenli bir şekilde dahil etme.

Veri İletimi

  • API'ler ve Web Servisleri: API'lere gönderilen verilerin düzgün formatlandığından emin olma.

  • Uluslararasılaştırma: Farklı dillerdeki karakterleri içeren URL'leri destekleme.

Güvenlik

  • Enjeksiyon Saldırılarını Önleme: Girişleri kodlayarak çapraz site betikleme (XSS) ve diğer enjeksiyon saldırıları riskini azaltma.

Alternatifler

URL kodlaması gerekli olsa da, diğer kodlama yöntemlerinin daha uygun olabileceği senaryolar vardır:

  • Base64 Kodlama: URL'ler içinde ikili verileri kodlamak veya daha yüksek bilgi yoğunluğu gerektiğinde kullanılır.

  • Yüzde Kodlaması Olmadan UTF-8 Kodlama: Bazı sistemler doğrudan UTF-8 kodlaması kullanır, ancak bu uygun şekilde işlenmediğinde sorunlara yol açabilir.

Uygulamanızın spesifik özelliklerini göz önünde bulundurarak en uygun kodlama yöntemini seçin.

Tarihçe

URL kodlaması, 1990'ların başlarında URL ve URI (Tekdüzen Kaynak Tanımlayıcı) standartlarının erken spesifikasyonları ile tanıtıldı. Özel karakterleri kodlamak için tutarlı bir yol ihtiyacı, dünya çapında kullanılan çeşitli sistemler ve karakter setlerinden kaynaklandı.

Önemli dönüm noktaları şunlardır:

  • RFC 1738 (1994): URL'leri tanımladı ve yüzde kodlamasını tanıttı.

  • RFC 3986 (2005): URI sözdizimini güncelledi, kodlama kurallarını rafine etti.

Zamanla, URL kodlaması web teknolojilerinin ayrılmaz bir parçası haline geldi ve farklı sistemler ve platformlar arasında güvenilir iletişimi sağladı.

Kod Örnekleri

İşte çeşitli programlama dillerinde URL kodlaması yapmanın örnekleri:

' Excel VBA Örneği
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
                    ' Unicode karakterlerini işleme
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

' Kullanım:
' =URLEncode("https://example.com/?name=Jürgen")
% MATLAB Örneği
function encodedURL = urlEncode(url)
    import java.net.URLEncoder
    encodedURL = char(URLEncoder.encode(url, 'UTF-8'));
end

% Kullanım:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## Ruby Örneği
require 'uri'

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

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = urllib.parse.quote(url, safe=':/?&=')
print(encoded_url)
## Çıktı: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// JavaScript Örneği
const url = 'https://example.com/path?query=hello world&name=Jürgen';
const encodedURL = encodeURI(url);
console.log(encodedURL);
// Çıktı: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Java Örneği
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());
        // Boşluklar için "+" yerine "%20" ile değiştir
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // Çıktı: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// C# Örneği
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);
        // Çıktı: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
    }
}
<?php
// PHP Örneği
$url = 'https://example.com/path?query=hello world&name=Jürgen';
$encodedURL = urlencode($url);
echo $encodedURL;
// Çıktı: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%C3%BCrgen
?>
// Go Örneği
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)
    // Çıktı: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%25C3%25BCrgen
}
// Swift Örneği
import Foundation

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

Not: Çıktı, her dilin rezerve edilmiş karakterleri ve boşlukları nasıl işlediğine bağlı olarak biraz farklılık gösterebilir (örneğin, boşlukları %20 veya + olarak kodlama).

URL Kodlama Sürecinin SVG Diyagramı

URL Kodlama Süreci Orijinal URL Özel Karakterleri Belirle URL'yi Kodla Örnek: Girdi: https://example.com/über uns Çıktı: https://example.com/%C3%BCber%20uns

Güvenlik Hususları

Doğru URL kodlaması ve çözümü güvenlik açısından kritik öneme sahiptir:

  • Enjeksiyon Saldırılarını Önleme: Kullanıcı girişlerini kodlamak, kötü niyetli kodların çalıştırılmasını önlemeye yardımcı olur ve çapraz site betikleme (XSS) ve SQL enjeksiyonu gibi riskleri azaltır.

  • Veri Bütünlüğü: Verilerin değiştirilmeden veya bozulmadan iletilmesini sağlar.

  • Standartlara Uyum: Kodlama standartlarına uymak, sistemler arasında uyumsuzluk sorunlarını önler.

Referanslar

  1. RFC 3986 - Tekdüzen Kaynak Tanımlayıcı (URI): https://tools.ietf.org/html/rfc3986
  2. URL Kodlaması Nedir ve Nasıl Çalışır? https://www.urlencoder.io/learn/
  3. Yüzde Kodlama: https://en.wikipedia.org/wiki/Percent-encoding
  4. URL Standardı: https://url.spec.whatwg.org/
  5. URI.escape geçersizdir: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Sonuç

URL kodlaması, web geliştirme ve İnternet iletişiminin temel bir yönüdür. Özel karakterleri güvenli bir formata dönüştürerek, URL'lerin tarayıcılar ve sunucular tarafından doğru bir şekilde yorumlanmasını sağlar, veri iletiminin bütünlüğünü ve güvenliğini korur. Bu araç, URL'lerinizdeki özel karakterleri kaçırmak için kullanışlı bir yol sunar, uyumluluğu artırır ve potansiyel hataları veya güvenlik açıklarını önler.

Geri bildirim