ترميز الروابط URL Encode
ترميز النصوص بنظام النسبة المئوية لتعمل بأمان داخل الروابط.
تسمح بنية الروابط بمجموعة محددة للغاية من المحارف. ويتطلب أي عنصر إضافي — مثل المسافات، وعلامات الاستفهام، ورموز العطف، والأحرف غير اللاتينية كالحروف العربية — تحويلاً عبر ترميز النسبة المئوية حتى لا يتوقف الرابط عن العمل بصورة يصعب تتبعها.
لماذا تتسبب الرموز المحجوزة في أخطاء ترميز الروابط
تمتلك بعض الرموز وظائف هيكلية أساسية في تكوين العنوان: تبدأ علامة ? سلسلة الاستعلام، ويفصل الرمز & بين المعاملات، وتقسم إشارة = المفتاح عن قيمته، ويبدأ الرمز # جزء التجزئة.
إذا أدرجت رمز عطف صريحاً داخل قيمة معامل — كاسم جهة يحتوي على الرمز — فسيتعامل الخادم معه كبداية لمعامل جديد تماماً، مما يقتطع القيمة الأصلية ويُظهر معاملاً فارغاً غير متوقع. تحويل الرمز إلى %26 يوضح للمحلل أنه جزء من البيانات وليس فاصلاً برمجياً.
خطوات ترميز النصوص لأداة URL Encode
- الصق النص أو القيمة المطلوب إدراجها ضمن الرابط في حقل الإدخال.
- انقر على زر الترميز لمعالجة النص.
- انسخ الناتج المرمّز واستخدمه مباشرة في سلسلة الاستعلام أو المسار أو رابط إعادة التوجيه.
- احرص على ترميز كل قيمة بشكل منفصل وتجنب تمرير الرابط المكتمل بالكامل.
- استعن بأداة فك الترميز للتأكد من المحتوى الفعلي لأي رابط مشفر مسبقاً.
أبرز المحارف المستهدفة في ترميز الروابط
| المحرف | الترميز المئوي | سبب الأهمية |
|---|---|---|
| space | %20 or + | يؤدي إلى انقطاع الرابط بالكامل في أغلب البيئات |
| & | %26 | يُفسر بدونه كفاصل بين المعاملات |
| ? | %3F | يُفسر بدونه كنقطة بداية لسلسلة الاستعلام |
| = | %3D | يُفسر بدونه كفاصل بين المفتاح وقيمته |
| # | %23 | يُعامل كل ما يرد بعده كمعرف تجزئة |
| / | %2F | يُفسر بدونه كفاصل بين أجزاء المسار |
| + | %2B | قد يُفك تشفيره خطأً على أنه مسافة فارغة |
ترميز معلمات الرابط المنفصلة وتجنب العنوان الكامل
الخطأ الأكثر شيوعاً بين المطورين هو إدخال الرابط بأكمله داخل أداة الترميز. يؤدي هذا الإجراء إلى تحويل المقاطع البنيوية مثل :// والفواصل الضرورية إلى سلاسل مئوية غير مفهومة للخوادم.
عالج كل قيمة بمفردها ثم قم بتركيب الرابط النهائي حولها. وفي بيئة JavaScript يُنصح بالاعتماد على دالة encodeURIComponent() لمعالجة القيم المستقلة، وقصر استخدام encodeURI() على الحالات التي تستدعي ضبط عنوان كامل فقط.
أسئلة شائعة حول ترميز الروابط URL Encode
ما هو مبدأ ترميز النسبة المئوية في الروابط؟
هو نسق يعبر عن المحرف بواسطة علامة النسبة المئوية متبوعة بقيمته البايتية بنظام السداسي عشر. تتحول المسافة مثلاً إلى %20 نظراً لأن 20 يمثل القيمة الست عشرية للمسافة في جدول ASCII.
لماذا تستبدل بعض الأدوات المسافة برمز الجمع بدلاً من الترميز المئوي؟
يعود ذلك إلى الأسلوب المتبع تاريخياً في إرسال استمارات HTML عبر سلاسل الاستعلام التي وظفت رمز +. كلا الاستخدامين قائم عملياً، لكن %20 مقبول في كل المواضع بينما يقتصر + على سلاسل الاستعلام دون مسارات الروابط.
متى يستحسن استعمال encodeURIComponent بدلاً من encodeURI؟
تُستخدم encodeURIComponent عند تشفير قيم المعاملات الفردية لتأمين الرموز المحجوزة أيضاً، في حين تقتصر encodeURI على الروابط الكاملة للتخلص من المحارف غير الصالحة كالمسافات دون المساس بالفواصل البنيوية.
كيف يتعامل نظام الترميز مع الحروف العربية وغير اللاتينية؟
تُحوَّل الحروف غير الإنجليزية أولاً إلى بايتات وفق معيار UTF-8، ثم يُرمَّز كل بايت بنظام النسبة المئوية المستقل، ولهذا قد ينتج عن الحرف الواحد تتابعان أو أكثر من سلاسل النسبة المئوية.
ما الأضرار المحتملة عند ترميز النص مرتين متتاليتين؟
يؤدي الترميز المزدوج إلى مشكلات تقنية واضحة؛ حيث يتحول الرمز %20 في المرة الثانية إلى %2520. وعندما يُجري الخادم عملية فك الترميز لمرة واحدة، تظهر القيمة كنص صريح %20 بدلاً من استرجاع المسافة المقصودة.