أداة ترميز/فك ترميز URL

الأسئلة الشائعة

ما هو ترميز URL؟

ترميز URL هو طريقة لتحويل الأحرف إلى صيغة يمكن نقلها عبر الإنترنت. يمكن إرسال روابط URL عبر الإنترنت فقط باستخدام مجموعة أحرف ASCII. وبما أن روابط URL غالبًا ما تحتوي على أحرف خارج مجموعة ASCII، يجب تحويلها. يستبدل ترميز URL أحرف ASCII غير الآمنة بـ '%' متبوعًا برقمين سداسي عشري.

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

يعمل ترميز URL عن طريق استبدال الأحرف غير الآمنة بـ '%' متبوعًا برقمين سداسي عشري يمثلان ترميز UTF-8 للحرف. على سبيل المثال، يتم ترميز مسافة الفراغ كـ %20. لا يمكن أن تحتوي روابط URL على مسافات، لذا يتم استبدالها إما بعلامة زائد (+) أو %20. يتم استبدال الأحرف الخاصة الأخرى برموز %xx الخاصة بها.

الأحرف الشائعة التي تحتاج إلى ترميز URL

الأحرف التالية تحتاج إلى ترميز URL عند استخدامها في روابط URL:

الحرفالترميز في URLالوصف
Space%20الحرف الأكثر شيوعًا الذي يتطلب ترميز URL
!%21علامة التعجب
"%22علامة الاقتباس المزدوجة
#%23رمز الهاشتاج (يستخدم لأجزاء URL)
$%24علامة الدولار
%%25علامة النسبة المئوية (حرف الهروب في ترميز URL)
&%26علامة و (تستخدم لفصل معلمات URL)
'%27علامة الاقتباس الفردية
(%28قوس فتح
)%29قوس إغلاق
+%2Bعلامة الجمع
,%2Cالفاصلة
/%2Fالشرطة المائلة (فاصل المسار في URL)
=%3Dعلامة التساوي (تعيين معلمات URL)
?%3Fعلامة الاستفهام (بداية سلسلة استعلام URL)

تطبيق ترميز URL في لغات البرمجة المختلفة

فيما يلي أمثلة لترميز وفك ترميز URL في لغات برمجة مختلفة:

Go

package main

import (
    "fmt"
    "net/url"
)

func main() {
    // Encode a URL
    text := "Hello World! Special chars: &?=/";
    encoded := url.QueryEscape(text)
    fmt.Println("Encoded:", encoded)

    // Decode a URL
    decoded, err := url.QueryUnescape(encoded)
    if err == nil {
        fmt.Println("Decoded:", decoded)
    }
}

C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

// Function to URL-encode a string
char *url_encode(char *str) {
    char *encoded = malloc(strlen(str) * 3 + 1);
    char *pstr = str;
    char *pbuf = encoded;

    while (*pstr) {
        if (isalnum(*pstr) || *pstr == '-' || *pstr == '_' || *pstr == '.' || *pstr == '~') {
            *pbuf++ = *pstr;
        } else if (*pstr == ' ') {
            *pbuf++ = '+';
        } else {
            sprintf(pbuf, "%%%.2X", *pstr);
            pbuf += 3;
        }
        pstr++;
    }
    *pbuf = '\\0';

    return encoded;
}

int main() {
    char *text = "Hello World! Special chars: &?=/";
    char *encoded = url_encode(text);

    printf("Original: %s\\n", text);
    printf("Encoded: %s\\n", encoded);

    free(encoded);
    return 0;
}

PHP

<?php
// URL encoding
$text = "Hello World! Special chars: &?=/";
$encoded = urlencode($text);
echo "Encoded: " . $encoded . "\\n";

// URL decoding
$decoded = urldecode($encoded);
echo "Decoded: " . $decoded . "\\n";
?>

Python

import urllib.parse

# URL encoding
text = "Hello World! Special chars: &?=/"
encoded = urllib.parse.quote(text)
print(f"Encoded: {encoded}")

# URL decoding
decoded = urllib.parse.unquote(encoded)
print(f"Decoded: {decoded}")

JavaScript

// URL encoding
const text = "Hello World! Special chars: &?=/";
const encoded = encodeURIComponent(text);
console.log("Encoded:", encoded);

// URL decoding
const decoded = decodeURIComponent(encoded);
console.log("Decoded:", decoded);

TypeScript

// URL encoding
const text: string = "Hello World! Special chars: &?=/";
const encoded: string = encodeURIComponent(text);
console.log("Encoded:", encoded);

// URL decoding
const decoded: string = decodeURIComponent(encoded);
console.log("Decoded:", decoded);

ما هو الفرق بين encodeURI و encodeURIComponent؟

تم تصميم encodeURI() لترميز URI كامل، لذلك فهو لا يقوم بترميز الأحرف ذات المعنى الخاص في URL، مثل /، ?، :، @، &، =، +، $ و #. على النقيض من ذلك، يقوم encodeURIComponent() بترميز جميع الأحرف الخاصة، مما يجعله مناسبًا لترميز أجزاء من URL، مثل معلمات الاستعلام. عند ترميز معلمات الاستعلام، استخدم دائمًا encodeURIComponent() للتأكد من ترميز جميع الأحرف الخاصة بشكل صحيح.