أداة لتشفير الأحرف الخاصة في سلسلة URL بأمان
أداة عبر الإنترنت لتشفير الأحرف الخاصة في سلسلة URL. أدخل عنوان URL، وستقوم هذه الأداة بترميزه عن طريق تشفير الأحرف الخاصة، مما يضمن أنه آمن للاستخدام في تطبيقات الويب.
مُشفّر سلسلة 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؟
عملية الترميز
-
تحديد الأحرف الخاصة: تحليل سلسلة URL وتحديد الأحرف التي ليست أحرف ASCII غير المحجوزة (الحروف، الأرقام،
-
,.
,_
,~
). -
تحويل إلى رمز ASCII: لكل حرف خاص، احصل على نقطة الرمز ASCII أو Unicode.
-
تحويل إلى تسلسل بايت UTF-8 (إذا لزم الأمر): بالنسبة للأحرف غير ASCII، قم بترميز الحرف إلى بايت واحد أو أكثر باستخدام ترميز UTF-8.
-
تحويل إلى ست عشري: تحويل كل بايت إلى معادلته الست عشرية ذات الرقمين.
-
إضافة رمز النسبة المئوية: إضافة علامة
%
أمام كل بايت ست عشري.
مثال على الترميز
-
الحرف:
' '
(مسافة)- رمز ASCII:
32
- ست عشري:
20
- ترميز URL:
%20
- رمز ASCII:
-
الحرف:
'é'
- ترميز UTF-8:
0xC3 0xA9
- ترميز URL:
%C3%A9
- ترميز UTF-8:
حالات خاصة يجب مراعاتها
-
الأحرف Unicode: يجب ترميز الأحرف غير ASCII في UTF-8 ثم ترميزها بالنسبة المئوية.
-
علامات النسبة المئوية المشفرة مسبقًا: يجب عدم إعادة ترميز علامات النسبة المئوية التي هي جزء من الترميزات النسبية.
-
الأحرف المحجوزة في سلسلة الاستعلام: تحتوي بعض الأحرف على معاني خاصة في سلاسل الاستعلام ويجب ترميزها لمنع تغيير الهيكل.
فك ترميز URL
ما هو فك ترميز URL؟
فك ترميز URL هو العملية العكسية لترميز URL. يقوم بتحويل الأحرف المشفرة بالنسبة المئوية إلى شكلها الأصلي، مما يجعل عنوان URL قابلًا للقراءة والتفسير من قبل البشر والأنظمة.
عملية الفك
-
تحديد تسلسلات الترميز بالنسبة المئوية: تحديد جميع رموز
%
التي تليها رقمين ست عشريين في سلسلة URL. -
تحويل الست عشري إلى بايت: ترجمة كل قيمة ست عشرية إلى بايتها المقابلة.
-
فك ترميز بايت UTF-8 (إذا لزم الأمر): بالنسبة لتسلسلات متعددة البايت، دمج البايتات وفك ترميزها باستخدام ترميز UTF-8 للحصول على الحرف الأصلي.
-
استبدال التسلسلات المشفرة: استبدال التسلسلات المشفرة بالنسبة المئوية بالأحرف المفككة.
مثال على الفك
-
مشفر:
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 في لغات برمجة مختلفة:
1' مثال Excel VBA
2Function URLEncode(ByVal Text As String) As String
3 Dim i As Integer
4 Dim CharCode As Integer
5 Dim Char As String
6 Dim EncodedText As String
7
8 For i = 1 To Len(Text)
9 Char = Mid(Text, i, 1)
10 CharCode = AscW(Char)
11 Select Case CharCode
12 Case 48 To 57, 65 To 90, 97 To 122, 45, 46, 95, 126 ' 0-9, A-Z, a-z, -, ., _, ~
13 EncodedText = EncodedText & Char
14 Case Else
15 If CharCode < 0 Then
16 ' التعامل مع الأحرف Unicode
17 EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
18 Else
19 EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
20 End If
21 End Select
22 Next i
23 URLEncode = EncodedText
24End Function
25
26' الاستخدام:
27' =URLEncode("https://example.com/?name=Jürgen")
28
1% مثال MATLAB
2function encodedURL = urlEncode(url)
3 import java.net.URLEncoder
4 encodedURL = char(URLEncoder.encode(url, 'UTF-8'));
5end
6
7% الاستخدام:
8% encodedURL = urlEncode('https://example.com/?name=Jürgen');
9
1## مثال Ruby
2require 'uri'
3
4url = 'https://example.com/path?query=hello world&name=Jürgen'
5encoded_url = URI::DEFAULT_PARSER.escape(url)
6puts encoded_url
7## الناتج: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
8
1// مثال Rust
2use url::form_urlencoded;
3
4fn main() {
5 let url = "https://example.com/path?query=hello world&name=Jürgen";
6 let encoded_url = percent_encode(url);
7 println!("{}", encoded_url);
8 // الناتج: https://example.com/path%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
9}
10
11fn percent_encode(input: &str) -> String {
12 use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
13 utf8_percent_encode(input, NON_ALPHANUMERIC).to_string()
14}
15
1## مثال Python
2import urllib.parse
3
4url = 'https://example.com/path?query=hello world&name=Jürgen'
5encoded_url = urllib.parse.quote(url, safe=':/?&=')
6print(encoded_url)
7## الناتج: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
8
1// مثال JavaScript
2const url = 'https://example.com/path?query=hello world&name=Jürgen';
3const encodedURL = encodeURI(url);
4console.log(encodedURL);
5// الناتج: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
6
1// مثال Java
2import java.net.URLEncoder;
3import java.nio.charset.StandardCharsets;
4
5public class URLEncodeExample {
6 public static void main(String[] args) throws Exception {
7 String url = "https://example.com/path?query=hello world&name=Jürgen";
8 String encodedURL = URLEncoder.encode(url, StandardCharsets.UTF_8.toString());
9 // استبدال "+" بـ "%20" للمسافات
10 encodedURL = encodedURL.replace("+", "%20");
11 System.out.println(encodedURL);
12 // الناتج: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
13 }
14}
15
1// مثال C#
2using System;
3using System.Net;
4
5class Program
6{
7 static void Main()
8 {
9 string url = "https://example.com/path?query=hello world&name=Jürgen";
10 string encodedURL = Uri.EscapeUriString(url);
11 Console.WriteLine(encodedURL);
12 // الناتج: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
13 }
14}
15
1<?php
2// مثال PHP
3$url = 'https://example.com/path?query=hello world&name=Jürgen';
4$encodedURL = urlencode($url);
5echo $encodedURL;
6// الناتج: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%C3%BCrgen
7?>
8
1// مثال Go
2package main
3
4import (
5 "fmt"
6 "net/url"
7)
8
9func main() {
10 urlStr := "https://example.com/path?query=hello world&name=Jürgen"
11 encodedURL := url.QueryEscape(urlStr)
12 fmt.Println(encodedURL)
13 // الناتج: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%25C3%25BCrgen
14}
15
1// مثال Swift
2import Foundation
3
4let url = "https://example.com/path?query=hello world&name=Jürgen"
5if let encodedURL = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
6 print(encodedURL)
7 // الناتج: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
8}
9
1## مثال R
2url <- "https://example.com/path?query=hello world&name=Jürgen"
3encodedURL <- URLencode(url, reserved = TRUE)
4print(encodedURL)
5## الناتج: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
6
ملاحظة: قد يختلف الناتج قليلاً بناءً على كيفية تعامل كل لغة مع الأحرف المحجوزة والمسافات (مثل ترميز المسافات كـ %20
أو +
).
رسم بياني SVG لعملية ترميز URL
اعتبارات الأمان
يعد الترميز وفك الترميز المناسبين لـ URL أمرًا حيويًا للأمان:
-
منع هجمات الحقن: يساعد ترميز مدخلات المستخدم في منع تنفيذ التعليمات البرمجية الضارة، مما يقلل من مخاطر البرمجة النصية عبر المواقع (XSS) وهجمات الحقن الأخرى.
-
سلامة البيانات: يضمن أن البيانات تُنقل دون تغيير أو فساد.
-
الامتثال للمعايير: يضمن الالتزام بمعايير الترميز تجنب مشاكل التوافق بين الأنظمة.
المراجع
- RFC 3986 - محدد الموارد الموحد (URI): https://tools.ietf.org/html/rfc3986
- ما هو ترميز URL وكيف يعمل؟ https://www.urlencoder.io/learn/
- الترميز بالنسبة المئوية: https://en.wikipedia.org/wiki/Percent-encoding
- معيار URL: https://url.spec.whatwg.org/
- URI.escape قديمة: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated
الخاتمة
يعد ترميز URL جانبًا أساسيًا من تطوير الويب والاتصالات عبر الإنترنت. من خلال تحويل الأحرف الخاصة إلى تنسيق آمن، يضمن أنه يمكن تفسير عناوين URL بشكل صحيح بواسطة المتصفحات والخوادم، مما يحافظ على سلامة وأمان نقل البيانات. توفر هذه الأداة وسيلة مريحة لترميز الأحرف الخاصة في عناوين URL الخاصة بك، مما يعزز التوافق ويمنع الأخطاء المحتملة أو الثغرات الأمنية.
ردود الفعل
انقر على الخبز المحمص لبدء إعطاء التغذية الراجعة حول هذه الأداة