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، بما في ذلك الأحرف في Unicode.

كيف يعمل ترميز URL؟

عملية الترميز

  1. تحديد الأحرف الخاصة: تحليل سلسلة URL وتحديد الأحرف التي ليست أحرف ASCII غير المحجوزة (الحروف، الأرقام، -, ., _, ~).

  2. تحويل إلى رمز ASCII: لكل حرف خاص، احصل على نقطة الرمز ASCII أو Unicode.

  3. تحويل إلى تسلسل بايت UTF-8 (إذا لزم الأمر): بالنسبة للأحرف غير ASCII، قم بترميز الحرف إلى بايت واحد أو أكثر باستخدام ترميز UTF-8.

  4. تحويل إلى ست عشري: تحويل كل بايت إلى معادلته الست عشرية ذات الرقمين.

  5. إضافة رمز النسبة المئوية: إضافة علامة % أمام كل بايت ست عشري.

مثال على الترميز

  • الحرف: ' ' (مسافة)

    • رمز ASCII: 32
    • ست عشري: 20
    • ترميز URL: %20
  • الحرف: 'é'

    • ترميز UTF-8: 0xC3 0xA9
    • ترميز URL: %C3%A9

حالات خاصة يجب مراعاتها

  • الأحرف Unicode: يجب ترميز الأحرف غير 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.

نقل البيانات

  • واجهات برمجة التطبيقات وخدمات الويب: ضمان تنسيق البيانات المرسلة إلى واجهات برمجة التطبيقات بشكل صحيح.

  • الدولية: دعم عناوين URL التي تحتوي على أحرف من لغات مختلفة.

الأمان

  • منع هجمات الحقن: ترميز المدخلات لتقليل خطر البرمجة النصية عبر المواقع (XSS) وغيرها من هجمات الحقن.

البدائل

بينما يعد ترميز URL ضروريًا، هناك سيناريوهات قد تكون فيها طرق الترميز الأخرى أكثر ملاءمة:

  • ترميز Base64: يستخدم لترميز البيانات الثنائية داخل عناوين URL أو عندما تكون هناك حاجة إلى كثافة معلومات أعلى.

  • ترميز UTF-8 بدون ترميز بالنسبة المئوية: تستخدم بعض الأنظمة ترميز UTF-8 مباشرة، ولكن هذا يمكن أن يؤدي إلى مشاكل إذا لم يتم التعامل معه بشكل صحيح.

اعتبر تفاصيل تطبيقك لاختيار طريقة الترميز الأكثر ملاءمة.

التاريخ

تم تقديم ترميز URL مع المواصفات المبكرة لمعايير URL وURI (محدد الموارد الموحد) في التسعينيات. نشأت الحاجة إلى طريقة متسقة لترميز الأحرف الخاصة من الأنظمة ومجموعات الأحرف المتنوعة المستخدمة في جميع أنحاء العالم.

تشمل المعالم الرئيسية:

  • RFC 1738 (1994): عرّف عناوين URL وقدم الترميز بالنسبة المئوية.

  • RFC 3986 (2005): تحديث بناء جملة URI، مما حسّن القواعد الخاصة بالترميز.

على مر الزمن، أصبح ترميز URL جزءًا لا يتجزأ من تقنيات الويب، مما يضمن التواصل الموثوق عبر أنظمة ومنصات مختلفة.

أمثلة على التعليمات البرمجية

إليك أمثلة على كيفية إجراء ترميز URL في لغات برمجة مختلفة:

' مثال 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
                    ' التعامل مع الأحرف Unicode
                    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) وهجمات الحقن الأخرى.

  • سلامة البيانات: يضمن أن البيانات تُنقل دون تغيير أو فساد.

  • الامتثال للمعايير: يضمن الالتزام بمعايير الترميز تجنب مشاكل التوافق بين الأنظمة.

المراجع

  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 الخاصة بك، مما يعزز التوافق ويمنع الأخطاء المحتملة أو الثغرات الأمنية.

تعليقات