أداة ترميز/فك ترميز 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() للتأكد من ترميز جميع الأحرف الخاصة بشكل صحيح.