متوفر أيضًا بلغات أخرى: English · Español · Português · Français
مرمّز وفاكّ ترميز الروابط (URL) مجاني
رمّز أو فكّ ترميز أي نص لاستعماله في رابط، باختيار من ثلاثة أوضاع بحسب الوجهة: قيمة مفردة أو رابط كامل أو حقل نموذج.
ما هو مرمّز وفاكّ ترميز الروابط؟
هذه أداة تحوّل نصاً عادياً إلى صيغة آمنة لوضعها داخل رابط، أو تعيد جزءاً من رابط مرمّزاً إلى نصه الأصلي المقروء، وكل ذلك يعمل في المتصفح فوراً أثناء الكتابة.
وفكرة ترميز الروابط أنّ الرابط لا يتحمّل كل الأحرف: المسافة والفاصلة العليا والعلامة & وغيرها لها معنى خاص في بنية الرابط نفسها، فلا بد من تحويلها إلى تسلسل %XX حتى لا تُفهم خطأً كجزء من البنية بدل كونها جزءاً من القيمة. والأداة توفر وضعي الترميز وفك الترميز، وثلاثة أوضاع لما تريد ترميزه بالضبط: قيمة مفردة، أو رابط كامل، أو حقل نموذج — لأن كل واحدة من هذه الحالات تتصرف بقواعد مختلفة قليلاً، والفرق بينها هو ما يسبب أغلب الأخطاء.
كيف تستعملها
- اختر الوضع وما تريد ترميزه. اضغط ترميز أو فك الترميز، وحدّد أيضاً هل ما تكتبه قيمة مفردة أم رابط كامل أم حقل نموذج، لأن كل خيار يهرّب مجموعة أحرف مختلفة.
- اكتب أو الصق النص. النتيجة تظهر في حقل الإخراج أثناء كتابتك مباشرة، بلا أي زر تشغيل ولا انتظار.
- انسخ النتيجة. اضغط نسخ فيتحول إلى «تم النسخ!» لثانيتين، وراجع سطر العدّ تحت الحقل لمقارنة عدد أحرف الإدخال بعدد أحرف الإخراج بعد الترميز.
الأوضاع الثلاثة، والفخّ بين + و%20
الفرق بين وضع القيمة المفردة ووضع الرابط الكامل هو فرق بين دالتين جافاسكربت معروفتين. encodeURIComponent تهرّب كل شيء عدا الحروف اللاتينية والأرقام والرموز - . _ ~، وهي مجموعة unreserved في RFC 3986. لكنها لا تلمس خمسة أحرف أخرى قد تظن أنها آمنة: ! و' و( و) و*. هذه ليست ضمن تلك المجموعة، فقيمة تحتوي فاصلة عليا أو قوسين قد تمرّ من encodeURIComponent كما هي دون تهريب، فتربك مُحلّلاً لاحقاً رغم أنك ظننت أنك رمّزتها بالكامل.
أما encodeURI، وهو وضع الرابط الكامل هنا، فيترك أحد عشر حرفاً إضافياً كما هي فوق تلك المجموعة: # و$ و& و+ و, و/ و: و; و= و? و@. وهذا هو الفرق الكامل بين الدالتين. لهذا يُستعمل وضع الرابط الكامل حين يكون النص رابطاً جاهزاً لا تريد تخريب بنيته — فتبقى / و? و# في مكانها لتفصل بين المسار والاستعلام والمرساة كما ينبغي — بينما وضع القيمة المفردة مخصص لقيمة واحدة ستضعها أنت داخل query string، حيث يجب تهريب حتى تلك الفواصل لأنها هنا جزء من البيانات لا من بنية الرابط.
والفخّ الكلاسيكي هو المسافة. حين يرسل نموذج HTML بياناته، أو حين تبني رابطاً بـ URLSearchParams، تتحول المسافة إلى + لا إلى %20: فـ new URLSearchParams({q: "a b"}) تعطي q=a+b. هذا سلوك صحيح تماماً ضمن معايير حقول النماذج، لكن المشكلة تظهر عند فك الترميز: decodeURIComponent("a+b") تعيد النص a+b كما هو، بعلامة الزائد وكل شيء، لأنها لا تعرف شيئاً عن قاعدة النماذج هذه، وتفهم فقط تسلسلات %XX. فمن يفكّ ترميز query جاءت من نموذج HTML باستعمال decodeURIComponent الساذجة يحصل على كل مسافة كعلامة + حرفية بدل أن تعود مسافة، وتبقى البيانات معطوبة إلى أن يلاحظ أحدهم. لهذا في هذه الأداة وضع مستقل لحقل النموذج: يرمّز المسافة إلى + عمداً حين يكون هذا هو الهدف الصحيح، ويعرف كيف يفكّها أيضاً.
وتفصيل قلّما يُذكر: لأن هذا الوضع يعتمد على URLSearchParams نفسها بدل إعادة كتابة القاعدة، فهو في الواقع أشد صرامة من encodeURIComponent. إذ يهرّب أربعة من الأحرف الخمسة التي تتركها تلك الدالة — فتصير ! و' و( و) هي %21 و%27 و%28 و%29 — ولا يترك سوى النجمة.
حدود صادقة
encodeURIComponent، أساس وضع القيمة المفردة هنا، لا تهرّب خمسة أحرف تحسبها بعض الأدوات القديمة آمنة: ! و' و( و) و*. إن كانت القيمة التي ترمّزها ستمر لاحقاً على محلّل صارم يعامل هذه الأحرف بمعنى خاص، فتهريب الأداة لن يكفي وحده، وعليك التحقق من الوجهة التي ستستقبل القيمة.
وتسلسل النسبة المئوية المبتور أو غير الصالح خطأ صريح لا محاولة تقريبية: decodeURIComponent("%E0%A4%A") مثلاً ترمي URIError، وهذه الأداة تعرض رسالة الخطأ بدل نتيجة مشوّهة، بدل أن تخمّن ما قصدته. وفك ترميز الرابط الكامل هنا هو العكس التام لـ encodeURI عن قصد، فيبقى %2F كما هو: إعادته إلى شرطة مائلة تغيّر شكل الرابط نفسه لا نصّه فقط.
ولا شيء يُرفع إلى أي خادم، وما تلصقه يضيع عند إعادة تحميل الصفحة لأنه لا يُحفظ في أي مكان.
لماذا هذه الأداة مجانية
كل عملية ترميز أو فك ترميز هنا مجرد استدعاء لدالة جافاسكربت مدمجة في متصفحك أصلاً، فلا حاجة لخادم يستقبل رابطك ويعالجه ويعيده، ولا تكلفة تكبر مع كل استعمال. لهذا تبقى الأداة مفتوحة للجميع بلا حدود يومية ولا نسخة مدفوعة لميزة أساسية، وهي الفلسفة نفسها في كل أداة على FreeToGenerate.com.