Whiz Tools

رمزگذار رشته URL

ابزار فرار رشته URL

مقدمه

در دنیای توسعه وب و ارتباطات اینترنتی، URLها (مکان‌نماهای منبع یکنواخت) نقش مهمی در شناسایی منابع در وب ایفا می‌کنند. با این حال، URLها محدودیت‌هایی در مورد کاراکترهایی که می‌توانند شامل شوند دارند. برخی کاراکترها معانی خاصی دارند، در حالی که برخی دیگر به دلیل احتمال تفسیر نادرست یا فساد در حین انتقال، برای استفاده در URLها ناامن هستند.

کدگذاری URL، که به عنوان کدگذاری درصدی نیز شناخته می‌شود، مکانیزمی برای تبدیل کاراکترهای خاص به فرمت قابل انتقال در اینترنت است. این ابزار به شما اجازه می‌دهد که یک رشته URL را وارد کنید و کاراکترهای خاص را فرار کنید و اطمینان حاصل کنید که URL معتبر است و می‌تواند به درستی توسط مرورگرها و سرورها تفسیر شود.

درک کدگذاری URL

کدگذاری URL چیست؟

کدگذاری URL شامل جایگزینی کاراکترهای ASCII ناامن با یک % و سپس دو رقم هگزادسیمال است که نمایانگر کد ASCII کاراکتر است. این اطمینان حاصل می‌کند که اطلاعات بدون تغییر در اینترنت منتقل می‌شوند.

به عنوان مثال، کاراکتر فضای ' ' با %20 جایگزین می‌شود.

چرا کدگذاری URL ضروری است؟

URLها تنها می‌توانند از طریق اینترنت با استفاده از مجموعه کاراکتر ASCII ارسال شوند. از آنجا که URLها اغلب شامل کاراکترهایی خارج از این مجموعه هستند، باید به فرمت ASCII معتبر تبدیل شوند. کدگذاری URL تضمین می‌کند که کاراکترهای خاص باعث ایجاد اثرات یا خطاهای ناخواسته در درخواست‌های وب نشوند.

کاراکترهایی که نیاز به کدگذاری دارند

طبق مشخصات RFC 3986، کاراکترهای زیر در URLها رزرو شده‌اند و باید در صورت استفاده به صورت حرفی، کدگذاری درصدی شوند:

  • جداکننده‌های عمومی: :, /, ?, #, [, ], @
  • جداکننده‌های فرعی: !, $, &, ', (, ), *, +, ,, ;, =

علاوه بر این، هر کاراکتر غیر ASCII، از جمله کاراکترهای یونیکد، باید کدگذاری شود.

کدگذاری URL چگونه کار می‌کند؟

فرآیند کدگذاری

  1. شناسایی کاراکترهای خاص: رشته URL را تجزیه کرده و کاراکترهایی را که کاراکترهای ASCII غیر محفوظ (حروف، اعداد، -, ., _, ~) نیستند شناسایی کنید.

  2. تبدیل به کد ASCII: برای هر کاراکتر خاص، کد ASCII یا نقطه کد یونیکد آن را بدست آورید.

  3. تبدیل به دنباله بایت UTF-8 (در صورت لزوم): برای کاراکترهای غیر ASCII، کاراکتر را به یک یا چند بایت با استفاده از کدگذاری UTF-8 تبدیل کنید.

  4. تبدیل به هگزادسیمال: هر بایت را به معادل هگزادسیمال دو رقمی آن تبدیل کنید.

  5. پیشوند با نماد درصد: هر بایت هگزادسیمال را با یک علامت % پیشوند کنید.

مثال کدگذاری

  • کاراکتر: ' ' (فضا)

    • کد ASCII: 32
    • هگزادسیمال: 20
    • کدگذاری URL: %20
  • کاراکتر: 'é'

    • کدگذاری UTF-8: 0xC3 0xA9
    • کدگذاری URL: %C3%A9

موارد حاشیه‌ای که باید در نظر گرفته شوند

  • کاراکترهای یونیکد: کاراکترهای غیر ASCII باید در UTF-8 کدگذاری شده و سپس کدگذاری درصدی شوند.

  • علامت‌های درصدی که از قبل کدگذاری شده‌اند: علامت‌های درصدی که بخشی از کدگذاری‌های درصدی هستند نباید دوباره کدگذاری شوند.

  • کاراکترهای رزرو شده در رشته‌های پرس و جو: برخی کاراکترها در رشته‌های پرس و جو معانی خاصی دارند و باید کدگذاری شوند تا از تغییر ساختار جلوگیری شود.

کدگذاری URL

کدگذاری URL چیست؟

کدگذاری URL معکوس فرآیند کدگذاری URL است. این کار کاراکترهای کدگذاری درصدی را به فرم اصلی خود برمی‌گرداند و URL را قابل خواندن و قابل تفسیر برای انسان‌ها و سیستم‌ها می‌کند.

فرآیند کدگذاری

  1. شناسایی دنباله‌های کدگذاری درصدی: تمام نمادهای % را که با دو رقم هگزادسیمال دنبال می‌شوند در رشته URL شناسایی کنید.

  2. تبدیل هگزادسیمال به بایت: هر مقدار هگزادسیمال را به بایت متناظر آن تبدیل کنید.

  3. کدگشایی بایت‌های UTF-8 (در صورت لزوم): برای دنباله‌های چند بایتی، بایت‌ها را ترکیب کرده و با استفاده از کدگذاری UTF-8 کدگشایی کنید تا کاراکتر اصلی را بدست آورید.

  4. جایگزینی دنباله‌های کدگذاری شده: دنباله‌های کدگذاری درصدی را با کاراکترهای کدگشایی شده جایگزین کنید.

مثال کدگشایی

  • کدگذاری شده: hello%20world

    • %20 به یک فضای ' ' تبدیل می‌شود
    • کدگشایی شده: hello world
  • کدگذاری شده: J%C3%BCrgen

    • %C3%A4 به 'ü' در UTF-8 تبدیل می‌شود
    • کدگشایی شده: Jürgen

اهمیت کدگشایی URL

کدگشایی URL زمانی که ورودی کاربر از URLها پردازش می‌شود، پارامترهای پرس و جو خوانده می‌شود یا داده‌های دریافتی از درخواست‌های وب تفسیر می‌شود، ضروری است. این اطمینان حاصل می‌کند که اطلاعات استخراج شده از یک URL در فرم صحیح و مورد نظر خود است.

موارد استفاده

توسعه وب

  • پارامترهای پرس و جو: کدگذاری ورودی کاربر در پارامترهای پرس و جو برای جلوگیری از خطاها یا آسیب‌پذیری‌های امنیتی.

  • پارامترهای مسیر: شامل داده‌های پویا در مسیرهای URL به صورت ایمن.

انتقال داده

  • APIها و خدمات وب: اطمینان از اینکه داده‌های ارسال شده به APIها به درستی فرمت شده‌اند.

  • بین‌المللی‌سازی: پشتیبانی از URLها با کاراکترهای زبان‌های مختلف.

امنیت

  • جلوگیری از حملات تزریقی: کدگذاری ورودی‌ها برای کاهش خطر حملات اسکریپت‌نویسی بین‌سایتی (XSS) و سایر حملات تزریقی.

جایگزین‌ها

در حالی که کدگذاری URL ضروری است، در برخی سناریوها ممکن است روش‌های کدگذاری دیگری مناسب‌تر باشند:

  • کدگذاری Base64: برای کدگذاری داده‌های باینری در URLها یا زمانی که نیاز به چگالی اطلاعات بالاتری است.

  • کدگذاری UTF-8 بدون کدگذاری درصدی: برخی سیستم‌ها مستقیماً از کدگذاری UTF-8 استفاده می‌کنند، اما این ممکن است در صورت عدم مدیریت صحیح منجر به مشکلاتی شود.

جزئیات خاص برنامه خود را در نظر بگیرید تا مناسب‌ترین روش کدگذاری را انتخاب کنید.

تاریخچه

کدگذاری URL با مشخصات اولیه URL و استانداردهای URI (شناسایی‌کننده منبع یکنواخت) در دهه 1990 معرفی شد. نیاز به یک روش سازگار برای کدگذاری کاراکترهای خاص از تنوع سیستم‌ها و مجموعه‌های کاراکتری که در سراسر جهان استفاده می‌شدند ناشی می‌شد.

نقاط عطف کلیدی شامل:

  • RFC 1738 (1994): URLها را تعریف کرده و کدگذاری درصدی را معرفی کرد.

  • RFC 3986 (2005): نحو URI را به‌روزرسانی کرده و قوانین کدگذاری را اصلاح کرد.

با گذشت زمان، کدگذاری URL به جزء جدایی‌ناپذیر فناوری‌های وب تبدیل شده است و ارتباطات قابل اعتماد بین سیستم‌ها و پلتفرم‌های مختلف را تضمین می‌کند.

مثال‌های کد

در اینجا مثال‌هایی از نحوه انجام کدگذاری URL در زبان‌های برنامه‌نویسی مختلف آورده شده است:

' مثال 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
                    ' مدیریت کاراکترهای یونیکد
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

' استفاده:
' =URLEncode("https://example.com/?name=Jürgen")
% مثال MATLAB
function encodedURL = urlEncode(url)
    import java.net.URLEncoder
    encodedURL = char(URLEncoder.encode(url, 'UTF-8'));
end

% استفاده:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## مثال Ruby
require 'uri'

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = URI::DEFAULT_PARSER.escape(url)
puts encoded_url
## خروجی: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// مثال 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);
    // خروجی: 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
import urllib.parse

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = urllib.parse.quote(url, safe=':/?&=')
print(encoded_url)
## خروجی: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// مثال JavaScript
const url = 'https://example.com/path?query=hello world&name=Jürgen';
const encodedURL = encodeURI(url);
console.log(encodedURL);
// خروجی: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// مثال 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());
        // جایگزینی "+" با "%20" برای فضاها
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // خروجی: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// مثال 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);
        // خروجی: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
    }
}
<?php
// مثال PHP
$url = 'https://example.com/path?query=hello world&name=Jürgen';
$encodedURL = urlencode($url);
echo $encodedURL;
// خروجی: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%C3%BCrgen
?>
// مثال 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)
    // خروجی: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%25C3%25BCrgen
}
// مثال Swift
import Foundation

let url = "https://example.com/path?query=hello world&name=Jürgen"
if let encodedURL = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
    print(encodedURL)
    // خروجی: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
}
## مثال R
url <- "https://example.com/path?query=hello world&name=Jürgen"
encodedURL <- URLencode(url, reserved = TRUE)
print(encodedURL)
## خروجی: https://example.com/path?query=hello%20world&name=J%C3%BCrgen

توجه: خروجی ممکن است بسته به نحوه مدیریت کاراکترهای رزرو شده و فضاها (به عنوان مثال، کدگذاری فضاها به عنوان %20 یا +) در هر زبان کمی متفاوت باشد.

نمودار SVG فرآیند کدگذاری URL

فرآیند کدگذاری URL URL اصلی شناسایی خاص کاراکترها کدگذاری URL مثال: ورودی: https://example.com/über uns خروجی: https://example.com/%C3%BCber%20uns

ملاحظات امنیتی

کدگذاری و کدگشایی صحیح URL برای امنیت بسیار مهم است:

  • جلوگیری از حملات تزریقی: کدگذاری ورودی‌های کاربر به جلوگیری از اجرای کدهای مخرب کمک می‌کند و خطراتی مانند اسکریپت‌نویسی بین‌سایتی (XSS) و تزریق SQL را کاهش می‌دهد.

  • تمامیت داده: اطمینان حاصل می‌کند که داده‌ها بدون تغییر یا فساد منتقل می‌شوند.

  • رعایت استانداردها: پیروی از استانداردهای کدگذاری از بروز مشکلات بین‌سیستمی جلوگیری می‌کند.

مراجع

  1. RFC 3986 - شناسایی‌کننده منبع یکنواخت (URI): https://tools.ietf.org/html/rfc3986
  2. کدگذاری URL چیست و چگونه کار می‌کند؟ https://www.urlencoder.io/learn/
  3. کدگذاری درصدی: https://en.wikipedia.org/wiki/Percent-encoding
  4. استاندارد URL: https://url.spec.whatwg.org/
  5. URI.escape منسوخ شده است: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

نتیجه‌گیری

کدگذاری URL جنبه‌ای اساسی از توسعه وب و ارتباطات اینترنتی است. با تبدیل کاراکترهای خاص به فرمت ایمن، اطمینان حاصل می‌کند که URLها به درستی توسط مرورگرها و سرورها تفسیر می‌شوند و تمامیت و امنیت انتقال داده حفظ می‌شود. این ابزار یک راه راحت برای فرار از کاراکترهای خاص در URLهای شما فراهم می‌کند و سازگاری را افزایش داده و از بروز خطاها یا آسیب‌پذیری‌های امنیتی جلوگیری می‌کند.

بازخورد