RevealTheme logo

أداة ترميز وفك ترميز الروابط (URL)

حوّل النص إلى ترميز آمن للروابط (الترميز بالنسبة المئوية) والعكس. مفيدة لسلاسل الاستعلام وعمليات إعادة التوجيه وتدفقات OAuth.

ما هو ترميز الروابط (URL) ومتى تحتاج إليه؟

ترميز الروابط (المعروف أيضًا باسم 'الترميز بالنسبة المئوية'، المحدَّد في RFC 3986) هو عملية تحويل الأحرف التي تحمل معنى خاصًا في الروابط —أو الأحرف غير الآمنة في الروابط مباشرةً— إلى تسلسل هروب سداسي عشري '%XX'. تحجز مواصفة الروابط أحرفًا معينة ذات معنى بنيوي: '?' يبدأ سلسلة الاستعلام، و'#' يبدأ الجزء (fragment)، و'&' يفصل بين معاملات الاستعلام، و'/' يفصل بين أجزاء المسار، وهكذا. إذا احتوى إدخال المستخدم على أي من تلك الأحرف وأدرجته كما هو في رابط، فسيسيء المحلّل (parser) تفسيره. يتجنب ترميز الروابط ذلك باستبدال كل حرف محجوز أو غير آمن بتمثيله السداسي العشري بالبايتات مسبوقًا بـ '%'. تتحول المسافة إلى %20، و'&' إلى %26، و'=' إلى %3D. أما الأحرف غير ASCII (السيريلية، الصينية، الرموز التعبيرية) فتتحول إلى تسلسلات UTF-8 متعددة البايتات، مع ترميز كل بايت بالنسبة المئوية. تتولى المتصفحات ذلك تلقائيًا عند نقرك على رابط، لكن كلما بنيت رابطًا عبر الكود —عند إنشاء استعلام بحث، أو وجهة إعادة توجيه، أو رد نداء OAuth، أو توقيع webhook— يجب عليك ترميز القيم التي يقدمها المستخدم أولاً. تستخدم هذه الأداة دالتي encodeURIComponent / decodeURIComponent نفسهما اللتين سيستخدمهما كود JavaScript لديك، بحيث يطابق السلوك ما يحدث في الإنتاج تمامًا.

حالات الاستخدام الشائعة

  • رمّز مصطلحات بحث المستخدم قبل إلحاقها برابط البحث (q=user+input?).

  • مرّر معامل OAuth المسمّى redirect_uri بأمان إلى خادم التفويض.

  • أنشئ روابط webhook تتضمّن حمولات JSON مُرمَّزة في سلسلة الاستعلام (query string).

  • رمّز رابط 'returnTo' كي يبقى سليمًا عند تمريره عبر روابط أخرى.

  • فك ترميز القيم المُرمَّزة التي تراها في شريط عنوان المتصفح بعد إرسال نموذج.

  • اختبر كيفية تحليل رابط مُشوَّه: رمّز حرفًا خاصًا وراقب ما يحدث.

الأسئلة الشائعة

متى ينبغي أن أرمّز رابطًا؟
رمّز دائمًا القيم التي يقدمها المستخدم قبل وضعها في رابط: معاملات الاستعلام، أو أجزاء المسار، أو الأجزاء (fragments). عدم الترميز من أكثر مصادر الأخطاء الخفية شيوعًا: القيمة 'قطط & كلاب' تُفسد سلسلة الاستعلام حتى تُرمَّز إلى 'قطط%20%26%20كلاب'.
ما الفرق بين encodeURI و encodeURIComponent؟
encodeURI مخصصة للروابط الكاملة: تترك الأحرف البنيوية مثل '/' و'?' و'&' و'=' سليمة لأن لها معنى في الرابط. أما encodeURIComponent فمخصصة لأجزاء الرابط (قيم الاستعلام، أجزاء المسار): فهي ترمّز كل ما ليس أبجديًا رقميًا. استخدم encodeURIComponent على قيم الاستعلام الفردية؛ ولا تستخدم encodeURI أبدًا على قيمة استعلام يقدمها المستخدم (فلن تهرّب '&' وستُفسد سلسلة الاستعلام لديك).
ما هو Base64 الآمن للروابط مقابل ترميز الروابط؟
هما مفهومان مختلفان. ترميز الروابط (هذه الأداة) يستبدل الأحرف الخاصة حرفًا بحرف. أما Base64 الآمن للروابط فهو صيغة من Base64 تستخدم '-' و'_' بدلاً من '+' و'/'، بحيث تكون النتيجة آمنة للروابط بالفعل دون ترميز إضافي.
لماذا يُفك ترميز '+' أحيانًا كمسافة؟
في application/x-www-form-urlencoded (إرسالات النماذج)، '+' هو اختصار للمسافة. تحافظ معظم أدوات فك الترميز على ذلك. أما في تحليل URI الحديث، فإن '%20' هو الترميز الصحيح للمسافة. تتعامل decodeURIComponent مع '+' باعتباره '+' حرفيًا؛ استخدم decodeURI أو أداة فك ترميز للنماذج لتحويل '+' إلى مسافة.
كيف تُرمَّز الأحرف غير ASCII؟
تُحوَّل أولاً إلى بايتات UTF-8 ثم يُرمَّز كل بايت بالنسبة المئوية. وهكذا تتحول 'café' إلى 'caf%C3%A9': الحرف 'é' عبارة عن بايتين UTF-8 (0xC3 0xA9). تتعامل هذه الأداة مع UTF-8 بشكل صحيح؛ أما بعض الأدوات القديمة فترمّز باستخدام Latin-1، ما يُنتج مخرجات مختلفة.
هل ترميز الروابط هو نفسه ترميز كيانات HTML؟
لا. ترميز الروابط (%XX) يهرّب الأحرف للروابط. أما ترميز كيانات HTML (&، <) فيهرّب الأحرف لترميز HTML. السياقان مختلفان؛ وترميز أحدهما في سياق الآخر خطأ شائع يؤدي إلى ثغرات XSS.

أدوات ذات صلة