ممّ يتكون عنوان URL، وما الذي يفعله ترميز URL؟
يتكون عنوان URL من نظام (scheme) وسلطة (المضيف والمنفذ) ومسار وسلسلة استعلام اختيارية من أزواج key=value وجزء (fragment) اختياري (RFC 3986). المحارف ذات المعنى داخل العنوان — المسافة و& و= و/ و? وكل ما يقع خارج ASCII — يجب ترميزها بالنسبة المئوية (تصبح المسافة %20) ليتمكن المستقبِل من التمييز بين البيانات والبنية. تتبع المتصفحات معيار WHATWG URL عند تحليل العناوين وتسلسلها.
كيفية استخدام مرمّز URL
- الصق القيمة أو عنوان URL.
- اختر الوضع: component لقيم الاستعلام، وURI لعناوين URL الكاملة، وform لمحتوى نماذج HTML.
- راجع جدول الأحرف المُهرَّبة.
- انسخ الناتج المرمَّز.
| الحرف | component | uri | form | rfc3986 |
|---|---|---|---|---|
| مسافة | %20 | %20 | + | %20 |
& | %26 | لا يُرمَّز | %26 | %26 |
= | %3D | لا يُرمَّز | %3D | %3D |
/ | %2F | لا يُرمَّز | %2F | %2F |
? | %3F | لا يُرمَّز | %3F | %3F |
é | %C3%A9 | %C3%A9 | %C3%A9 | %C3%A9 |
! ' ( ) | لا يُرمَّز | لا يُرمَّز | %21 %27 %28 %29 | %21 %27 %28 %29 |
* | لا يُرمَّز | لا يُرمَّز | لا يُرمَّز | %2A |
~ | لا يُرمَّز | لا يُرمَّز | %7E | لا يُرمَّز |
- . _ | لا يُرمَّز | لا يُرمَّز | لا يُرمَّز | لا يُرمَّز |
componentencodeURIComponent (قيم الاستعلام)uriencodeURI (الرابط بالكامل، يحافظ على / ? & =)formapplication/x-www-form-urlencoded (المسافة → +)rfc3986RFC 3986 صارم (يرمّز أيضاً ! * ' ( ))
«ترميز كل حرف» يرمّز كل بايت، بما في ذلك الحروف. كل خانة ينتجها مرمِّز الأداة نفسه.
مزايا مرمّز URL
- أوضاع encodeURIComponent وencodeURI وform-urlencoded (علامة + للمسافات) وRFC 3986 الصارم وترميز كل الأحرف
- جدول بكل حرف مُهرَّب مع نقطة الترميز الخاصة به وشكله المرمَّز
- ترميز كل سطر على حدة لقوائم القيم
- تلميحات عندما لا يناسب الوضع المختار المدخل (مثل عنوان URL كامل مع encodeURIComponent)
- نتائج فورية مع إحصاءات الطول
مثال على مرمّز URL
ترميز قيمة استعلام تحتوي على Unicode
الإدخال:
q=café & théالنتيجة:
q%3Dcaf%C3%A9%20%26%20th%C3%A9الأسئلة الشائعة حول مرمّز URL
encodeURIComponent أم encodeURI — أيهما أحتاج؟
استخدم encodeURIComponent لقيمة واحدة تُدرج في سلسلة استعلام أو مقطع مسار: فهو يهرّب «&» و«=» و«/» و«?». واستخدم encodeURI لعنوان URL كامل حتى تبقى الأحرف المكوّنة لبنيته سليمة.
لماذا تظهر المسافات أحياناً كـ «+» وأحياناً كـ «%20»؟
«+» هي اصطلاح نماذج HTML (application/x-www-form-urlencoded) ولا تصلح إلا في سلاسل الاستعلام ومحتوى النماذج. أما «%20» فتعمل في كل مكان. اختر وضع «form» للحصول على «+».
ما هو وضع RFC 3986 الصارم؟
تترك دالة encodeURIComponent في JavaScript الأحرف ! * ' ( ) دون تهريب، لكن RFC 3986 يدرجها ضمن الأحرف المحجوزة. يرمّزها الوضع الصارم أيضاً، بما يطابق دالة rawurlencode في PHP وقواعد توقيع OAuth 1.0.
كيف تُرمَّز أحرف Unicode؟
تُحوَّل أولاً إلى بايتات UTF-8 ويصبح كل بايت %XX، فيتحوّل الحرف «é» إلى %C3%A9، ويصبح كل حرف عربي تسلسلين أو ثلاثة تسلسلات مُهرَّبة.
ملاحظات تقنية
يستبدل ترميز النسبة المئوية (RFC 3986) كل بايت من تمثيل UTF-8 بالصيغة %XX. أما الأحرف التي تبقى على حالها فتتوقف على الوضع المختار: يُبقي encodeURIComponent الحروف والأرقام و- _ . ! ~ * ' ( )؛ ويُبقي encodeURI إضافةً إليها فواصل بنية عنوان URL وهي ; , / ? : @ & = + $ #؛ ويتبع وضع form مُسلسِل application/x-www-form-urlencoded في مواصفة URL من WHATWG، فلا يُبقي إلا الحروف والأرقام و* - . _ ويكتب المسافة «+» (لذا تصبح ~ ! ' ( ) على الترتيب %7E %21 %27 %28 %29)؛ ولا يُبقي الوضع الصارم إلا الأحرف غير المحجوزة في RFC 3986 (الحروف والأرقام و- . _ ~)؛ أما خيار «ترميز كل حرف» فيرمّز كل بايت، بما في ذلك الحروف. وفي جميع الأوضاع تُستبدل البدائل المنفردة (lone surrogates)، التي كانت ستجعل encodeURIComponent يرمي استثناءً، بالحرف U+FFFD.
المراجع
- RFC 3986: Uniform Resource Identifier (URI): Generic Syntaxأجزاء URI (النظام والسلطة والمسار والاستعلام والجزء) والمحارف المحجوزة والترميز بالنسبة المئوية.
- URL Standardكيف تحلّل المتصفحات عناوين URL فعلياً وتسلسلها وترمّزها، بما فيها application/x-www-form-urlencoded.