ترميز الرموز الخاصة في الروابط: مرجع للمطورين
مرجع شامل لترميز الرموز الخاصة في الروابط بما في ذلك المسافات وعلامة العطف والـ unicode والمزيد.
الرموز الخاصة في الروابط
تتبع الروابط قواعد صياغة صارمة محددة في معيار RFC 3986. تحمل العديد من الرموز معاني خاصة أو أنها غير مسموح بها في أجزاء معينة من الرابط. إن فهم كيفية ترميز هذه الرموز بشكل صحيح أمر أساسي لبناء تطبيقات وواجهات برمجية (APIs) موثوقة على الويب.
رمز المسافة
رمز المسافة هو أكثر الرموز شيوعًا من حيث الحاجة إلى الترميز. ومع ذلك، يمكن ترميزه بطريقتين حسب السياق:
%20- ترميز percent-encoding وفقRFC 3986، ويُستخدم في مسارات الروابط وفي معظم السياقات+- يُستخدم في صيغةapplication/x-www-form-urlencoded(إرسال نماذج HTML)
عند بناء الروابط برمجيًا، يُفضّل استخدام %20 تحقيقًا للاتساق. أما عند بناء بيانات النماذج، فإن صيغة + هي المعيار المتبع.
نظرة معمّقة على الرموز المحجوزة
علامة العطف (&)
تفصل علامة العطف بين معاملات الاستعلام. وعندما تظهر علامة العطف داخل قيمة معامل، يجب ترميزها كـ %26 لمنع تفسيرها على أنها فاصل. وفي سياقات HTML، يجب أيضًا ترميزها ككيان بالصيغة &.
علامة الاستفهام (?)
تفصل علامة الاستفهام بين المسار وسلسلة الاستعلام. وإذا ظهرت علامة الاستفهام داخل قيمة معامل، فيجب ترميزها كـ %3F. لاحظ أن encodeURI() لا يقوم بترميز علامات الاستفهام، بينما يقوم encodeURIComponent() بذلك.
رمز المربع (#)
يبدأ رمز المربع معرّف الجزء (fragment identifier). في الروابط، يجب ترميز أي # يظهر داخل قيمة معامل استعلام كـ %23، وإلا فإن المتصفح سيفسّر كل ما يليه على أنه معرّف جزء ولن يرسله إلى الخادم.
الشرطة المائلة الأمامية (/)
تفصل الشرطات المائلة الأمامية بين مقاطع المسار. وعندما تظهر شرطة مائلة داخل قيمة مقطع مسار (مثل اسم ملف يحتوي على شرطة مائلة)، يجب ترميزها كـ %2F. لاحظ أن بعض الخوادم قد تفك ترميز %2F وتظل تعامله كفاصل مسار.
رموز Unicode
تُرمّز الرموز غير المنتمية إلى ASCII بتحويلها أولًا إلى تسلسل بايتات UTF-8، ثم ترميز كل بايت بأسلوب percent-encoding. إليك بعض الأمثلة:
- حرف e اللاتيني مع علامة النبرة (é) ← UTF-8: 0xC3 0xA9 ←
%C3%A9 - الحرف الصيني (中) ← UTF-8: 0xE4 0xB8 0xAD ←
%E4%B8%AD - رمز تعبيري (كرة أرضية) ← UTF-8: 0xF0 0x9F 0x8C 0x8D ←
%F0%9F%8C%8D
الترميز في مكوّنات الرابط المختلفة
| المكوّن | ما يجب ترميزه | مثال |
|---|---|---|
| مقطع المسار | المسافات و ? و # والرموز غير ASCII | /path/my%20file |
| مفتاح الاستعلام | = و & و # و + والمسافات | my%20key=value |
| قيمة الاستعلام | & و # و + والمسافات و = | key=hello%20world |
| الجزء (Fragment) | المسافات والرموز غير ASCII | #section%20one |
أخطاء شائعة
- نسيان ترميز
#داخل قيم الاستعلام (فيُحذف باقي الرابط دون أي تنبيه) - الترميز المزدوج للسلاسل المُرمّزة مسبقًا (فينتج
%2520بدلًا من%20) - استخدام
encodeURI()بدلًا منencodeURIComponent()لقيم المعاملات - عدم ترميز
+داخل قيم الاستعلام (فيُفك ترميزه كمسافة) - افتراض أن جميع الخوادم تتعامل مع
%2Fبالطريقة نفسها في المسارات