لماذا تحتاج الروابط إلى ترميز
يمكن للرابط احتواء مجموعة محدودة فقط من أحرف ASCII. المسافات والأحرف المشكّلة (é, ü, ñ) والنصوص غير اللاتينية (العربية والصينية واليابانية) وعلامات الترقيم المحجوزة ممنوعة في الروابط كما هي. يُحوّل الترميز المئوي الأحرف غير الآمنة: يُستبدَل كل حرف بـ `%` يتبعه رقمان سداسيا عشريان.
بدون ترميز سينكسر رابط مثل `https://example.com/search?q=مرحبا بالعالم`. مُرمَّزاً صحيحاً: `https://example.com/search?q=%D9%85%D8%B1%D8%AD%D8%A8%D8%A7`.
encodeURI مقابل encodeURIComponent
تُرمِّز `encodeURI()` رابطاً كاملاً مع الحفاظ على الأحرف ذات المعنى الهيكلي في الرابط. استخدمها حين لديك رابط كامل وتريد فقط جعله آمناً للنقل.
تُرمِّز `encodeURIComponent()` بشكل أكثر عدوانية — كل شيء عدا الحروف والأرقام وبعض الرموز الخاصة. استخدمها لقيم معاملات الاستعلام الفردية أو أجزاء المسار.
المخاطر الشائعة للترميز
الترميز المزدوج: ترميز سلسلة مُرمَّزة مسبقاً ينتج `%2520` بدلاً من `%20`. فكّ التشفير دائماً أولاً ثم أعد التشفير إذا لزم. الزائد (+) مقابل المسافة: في سلاسل الاستعلام `+` يمثّل أحياناً مسافة. في مسارات الروابط يجب أن تكون المسافات دائماً `%20`.