ما هو الترميز بالنسبة المئوية؟+−
الترميز بالنسبة المئوية (يُسمى أيضًا ترميز الروابط) يستبدل الحرف بعلامة % متبوعة بقيمته السداسية العشرية المكوّنة من رقمين، وتتكرر هذه العملية لكل بايت من تمثيله بترميز UTF-8. بهذه الطريقة يمكن للرابط أن يحمل مسافة (%20)، أو علامة & (%26)، أو رمزًا تعبيريًا دون الخلط بين هذه الأحرف وبين قواعد بناء الرابط نفسه.
ما الفرق بين encodeURIComponent وencodeURI؟+−
تقوم encodeURIComponent بتشفير كل شيء باستثناء مجموعة صغيرة من الأحرف غير المحجوزة، مما يجعلها الخيار الصحيح لقيمة واحدة - معامل استعلام أو جزء من مسار - لأنها تشفّر أيضًا أحرفًا مثل & و= التي قد تُقرأ لولا ذلك كجزء من بنية الرابط. أما encodeURI فهي مخصصة لرابط كامل: تترك الأحرف البنيوية مثل :، /، ?، &، و# دون تغيير حتى يستمر الرابط في العمل، ولا تشفّر إلا الأحرف التي لا يمكن للرابط احتواءها فعليًا، مثل المسافات. تمرير رابط كامل عبر encodeURIComponent يُفسده، لأنها ستشفّر أيضًا الشرطات المائلة والنقطتين الرأسيتين.
هل ما زال ينبغي استخدام escape() وunescape()؟+−
لا. أُهملت كلتا الدالتين منذ أول إصدار من معيار جافاسكريبت الذي قدّم أيضًا encodeURIComponent، لأن escape() لا تشفّر الأحرف غير ASCII بالطريقة التي يتوقعها HTTP والروابط الحديثة - فهي تستخدم لكل ما هو خارج Latin-1 صيغة غير قياسية %uXXXX لا تستطيع decodeURIComponent قراءتها مرة أخرى. تحتفظ هذه الأداة بهذا الخيار فقط لتمكينك من فحص ما ينتجه نظام قديم.
لماذا تتحول علامة + في سلسلة الاستعلام إلى مسافة؟+−
تأتي سلاسل الاستعلام تاريخيًا من إرسال نماذج HTML، التي تستخدم صيغة application/x-www-form-urlencoded: فهي تُرمّز المسافة الفعلية كـ + بدلاً من %20، ويتعامل محلل هذه الأداة (وكذلك URLSearchParams في جافاسكريبت) مع كليهما كمسافة عند فك التشفير. وإذا احتاجت قيمة ما فعليًا إلى علامة زائد حرفية، فيجب ترميزها هي نفسها بالنسبة المئوية كـ %2B.
ماذا يحدث مع معامل متكرر مثل ?tag=a&tag=b؟+−
لا يُفقد شيء - تحافظ هذه الأداة على كل ظهور، بترتيبه، كسطر مستقل في جدول معاملات الاستعلام، تمامًا كما تجمع معظم أطر عمل الخوادم مفتاحًا متكررًا في قائمة. تعديل سطر أو إزالته لا يؤثر على البقية.
لماذا افترض المحلل https:// لرابطي؟+−
سلسلة مثل example.com/path ليس لها بروتوكول، لذا لا يستطيع المتصفح ولا هذه الأداة معرفة ما إذا كانت عنوان ويب، أو مخصصة لبروتوكول آخر، أو مجرد نص عادي. وبدلاً من رفضها، يفترض المحلل https:// حتى تتمكن مع ذلك من فحصها وتعديلها - يظهر تلميح في كل مرة يحدث فيها ذلك، ويمكنك تصحيح حقل البروتوكول إذا كان المقصود مخططًا مختلفًا.