طريقة الاستخدام
- الصق النص أو الرابط في النص أو الرابط.
- اختر ترميز أو فك الترميز في الإجراء.
- لقيمة واحدة، مثل كلمة بحث، أبقِ النطاق على قيمة واحدة. ولرابط كامل اختر رابط كامل.
- اقرأ النتيجة، وجدول معاملات الاستعلام حين يكون النص رابطاً فيه استعلام.
ماذا يفعل ترميز النسبة المئوية
لا يحمل العنوان الإلكتروني إلا مجموعة صغيرة من الأحرف. وتُكتب كل الأحرف الأخرى بعلامة % ورقمين سداسيين عشريين لكل بايت من صيغتها UTF-8. فيصبح الحرف التركي ç هكذا %C3%A7، وتصبح المسافة %20. والقواعد في RFC 3986، القسم 2.1.
ç → UTF-8 C3 A7 → %C3%A7
- يُبقي الترميز بـقيمة واحدة الحروف A إلى Z وa إلى z، والأرقام 0 إلى 9، والرموز - _ . ~ * ' ( ) كما هي، وكذلك علامة التعجب.
- يحوّل فك الترميز كل %XX صالحة إلى بايتها، ثم يحوّل البايتات إلى الحروف التي تكوّنها.
قيمة واحدة أو رابط كامل
قيمة واحدة يرمّز الفواصل أيضاً (: / ? # & = و+)، فلا تستطيع قيمة استعلام أن تكسر بنية العنوان. أما رابط كامل فيترك هذه الفواصل كما هي، فيحتفظ الرابط بشكله. وعند فك ترميز رابط كامل، يبقى الهروب الذي يمثل فاصلاً، مثل %2F، مرمّزاً، فيظل الرابط بالمعنى نفسه.
ترميز النماذج وعلامة +
تكتب نماذج HTML المسافة بـ+ وعلامة الزائد بـ%2B. لذلك تعني + في سلسلة استعلام كتبها نموذج مسافة. ويقرأ الخيار ترميز النماذج هذه القاعدة ويكتبها. وإذا كان معطلاً، تبقى + علامة زائد كما يقول RFC 3986.
ما يرفضه فك الترميز
- علامة % لا يتبعها رقمان سداسيان عشريان، مثل نهاية %E0%A4%A.
- هروبات لا تكوّن UTF-8 صالحاً، مثل البايت المفرد %FF.
- حرف تالف، مثل نصف رمز تعبيري، لا يمكن ترميزه.
مثال محلول: رابط بحث
ترميز القيمة ”القاهرة & الإسكندرية؟“ بخيار قيمة واحدة وترميز النماذج معطل يعطي %D8%A7%D9%84%D9%82%D8%A7%D9%87%D8%B1%D8%A9%20%26%20%D8%A7%D9%84%D8%A5%D8%B3%D9%83%D9%86%D8%AF%D8%B1%D9%8A%D8%A9%D8%9F. فالمسافة والعطف وعلامة الاستفهام العربية؟، وهي بايتان في UTF-8، كلها مرمّزة، وكل حرف عربي يظهر زوجاً مثل %D8%A7.
فك ترميز https://example.com/بحث?q=%D9%82%D9%87%D9%88%D8%A9+%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9&page=2 مع تفعيل رابط كامل وترميز النماذج يعطي https://example.com/بحث?q=قهوة عربية&page=2. في الاستعلام معاملان: q هو قهوة عربية، وpage هو 2.
| المدخل | النتيجة |
|---|---|
| القاهرة & الإسكندرية؟ (قيمة واحدة، ترميز) | %D8%A7%D9%84%D9%82%D8%A7%D9%87%D8%B1%D8%A9%20%26%20%D8%A7%D9%84%D8%A5%D8%B3%D9%83%D9%86%D8%AF%D8%B1%D9%8A%D8%A9%D8%9F |
| https://example.com/بحث?q=%D9%82%D9%87%D9%88%D8%A9+%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9&page=2 (فك الترميز) | https://example.com/بحث?q=قهوة عربية&page=2 |
الأسئلة الشائعة
ما الفرق بين encodeURI وencodeURIComponent؟
يرمّز encodeURIComponent كل فاصل، فيناسب قيمة واحدة من سلسلة استعلام. ويُبقي encodeURI الرموز التي تعطي العنوان بنيته، مثل : / ? # & و=، فيناسب رابطاً كاملاً. فالخيار قيمة واحدة يقابل الأول، والخيار رابط كامل يقابل الثاني.
لماذا تصبح المسافة %20 في موضع، و+ في موضع آخر؟
%20 هو الهروب المعياري للمسافة، وهو صالح في أي مكان من العنوان. أما + فتعني مسافة في ترميز النماذج وحده، أي في سلاسل الاستعلام التي تكتبها نماذج HTML. فعّل ترميز النماذج حين يأتي الرابط من نموذج.
لماذا يُرفض %E0%A4%A؟
يبدأ الهروب %E0 حرفاً من ثلاثة بايتات، لكن النص ينتهي بعد %A ولا يكتمل الهروب. فكل علامة % تحتاج إلى رقمين سداسيين عشريين، ويجب أن ينتمي كل بايت إلى حرف UTF-8 كامل.
هل يُرسل رابطي إلى خادم؟
لا. يتولى متصفحك الترميز وفك الترميز، فتبقى الروابط التي تحمل رموزاً أو بيانات خاصة على جهازك.
لماذا تبقى علامة الزائد في معاملاتي بعد فك الترميز؟
حين يكون ترميز النماذج معطلاً تبقى + علامة زائد، كما يعرّفها RFC 3986. وتكتب نماذج الويب المسافات بـ+ كثيراً، ففعّل الخيار لتقرأ هذه الروابط كما قصدها النموذج.
المصادر
- RFC 3986: Uniform Resource Identifier (URI): Generic Syntax, section 2.1, IETF (باللغة الإنجليزية)
- ECMA-262: encodeURI, encodeURIComponent and decodeURI in the ECMAScript specification (باللغة الإنجليزية)
- WHATWG URL Standard: application/x-www-form-urlencoded parsing (باللغة الإنجليزية)
آخر مراجعة للأرقام والنص: الثلاثاء، 30 جمادى الأولى 1448 بعد الهجرة.