ترميز / فك ترميز URL

رمّز بالنسبة المئوية أو فكّ ترميز رابط URL أو جزء واحد منه، مباشرة أثناء الكتابة. لا شيء تكتبه يُرسَل إلى أي مكان.

الجزء مقابل URI الكامل

كل منهما يرمّز أحرفًا مختلفة.

ترميز الجزء يهرب من كل ما هو غير آمن داخل مقطع واحد من الرابط، بما في ذلك & و= و?، استخدمه لقيمة معامل استعلام. ترميز URI الكامل يترك هذه الأحرف كما هي لأن لها معنى بنيويًا في عنوان كامل، استخدمه عند ترميز عنوان كامل بدلاً من جزء واحد منه.

لماذا نرمّز رابطًا أصلًا

لا يمكن أن تحتوي الروابط إلا على مجموعة محدودة من أحرف ASCII. المسافات، الأحرف المشكّلة، الرموز التعبيرية، والرموز المحجوزة مثل & أو # تحتاج إلى ترميز بالنسبة المئوية (مثل %20 للمسافة) حتى تنجو عند تمريرها كجزء من رابط دون كسره.

كيف يعمل

يستدعي الترميز دالتي المتصفح نفسه encodeURIComponent أو encodeURI، وهما نفس الدالتين اللتين يستخدمهما كود جافاسكريبت، لذا يكون الإخراج تمامًا كما ينتجه المتصفح أو مكتبة HTTP. كل بايت غير آمن يتحول إلى علامة نسبة مئوية بالإضافة إلى رقمين سداسيَّي عشريَّين من ترميز UTF-8 الخاص به: تتحول المسافة إلى %20، وتتوسّع الأحرف متعددة البايتات إلى عدة رموز هروب (é هي %C3%A9).

يوجد وضعا الترميز لأن «ترميز رابط» يعني شيئين مختلفين. وضع الجزء يهرب من كل شيء ليس حرفًا أو رقمًا أو حفنة من الرموز الآمنة، بما في ذلك / ? & = :. هذا ما تحتاجه لقيمة واحدة تدخل في سلسلة استعلام، وإلا فإن علامة العطف داخل القيمة تقسّم معاملك إلى قسمين. يترك وضع URI الكامل الأحرف البنيوية كما هي حتى يستمر عمل رابط كامل، ولا يهرب إلا من الأحرف التي لا يمكن أن تظهر خامًا على الإطلاق. استخدام ترميز الجزء على رابط كامل يكسره؛ واستخدام ترميز URI الكامل على قيمة معامل هو ثغرة حقن تنتظر أن تحدث. اختر بناءً على ما ترمّزه، لا بناءً على العادة.

يشغّل وضع فك الترميز decodeURIComponent، مع إضافة عملية واحدة: تُحوَّل علامات الزائد إلى مسافات أولًا، لأن ترميز نماذج HTML (تنسيق application/x-www-form-urlencoded الذي تراه في سلاسل الاستعلام) يكتب المسافات تاريخيًا كـ +. الإدخال المُشوَّه، مثل علامة % منفردة غير متبوعة برقمين سداسيَّي عشريَّين، يُطلِق URIError تلتقطه الأداة وتُبلِغ عنه بدلاً من عرض نص نصف مفكوك الترميز. إذا بقيت تسلسلات %25xx بعد فك الترميز مرة واحدة، فسلسلتك مُرمَّزة مرتين؛ مرّرها عبر فك الترميز مرة أخرى.

كلا الاتجاهين هما مجرد استدعاء دالة واحدة مدمجة في تبويبك. لوحة Network في أدوات المطوّر لا تُظهر أي حركة أثناء الكتابة، لذا تبقى الرموز والروابط التي تحتوي أسرارًا على جهازك فقط.