ممّ يتكون عنوان URL، وما الذي يفعله ترميز URL؟
يتكون عنوان URL من نظام (scheme) وسلطة (المضيف والمنفذ) ومسار وسلسلة استعلام اختيارية من أزواج key=value وجزء (fragment) اختياري (RFC 3986). المحارف ذات المعنى داخل العنوان — المسافة و& و= و/ و? وكل ما يقع خارج ASCII — يجب ترميزها بالنسبة المئوية (تصبح المسافة %20) ليتمكن المستقبِل من التمييز بين البيانات والبنية. تتبع المتصفحات معيار WHATWG URL عند تحليل العناوين وتسلسلها.
كيفية استخدام محلّل سلاسل الاستعلام
- الصق سلسلة استعلام أو عنوان URL كاملاً.
- افحص جدول المعاملات (الموضع والمفتاح والقيمة ومسار الأقواس والصيغة الخام) وعرض JSON.
- اختر نمط المصفوفات والترميز اللذين تتوقعهما واجهة API لديك، ثم انسخ سلسلة الاستعلام المعاد بناؤها.
مزايا محلّل سلاسل الاستعلام
- يحلّل المعاملات المفصولة بـ ? و& و; مع فك الترميز بالنسبة المئوية وعلامة الزائد
- تتحوّل المفاتيح المكرّرة إلى مصفوفات؛ ويتحوّل ترميز الأقواس key[] وkey[a][b] إلى مصفوفات وكائنات متداخلة
- كشف اختياري للأنواع (الأعداد والقيم المنطقية وnull) في عرض JSON
- يعيد بناء الاستعلام بأربعة أنماط للمصفوفات (التكرار، الأقواس، الفهارس، الفاصلة) وترميزين (RFC 3986 والنماذج)
- يعرض الترتيب الأصلي بعد إعادة ترميزه إلى جانب إعادة البناء المنظّمة، مع ترتيب اختياري للمفاتيح
- يقبل عنوان URL كاملاً ويستخرج جزء الاستعلام فقط
مثال على محلّل سلاسل الاستعلام
تحليل مصفوفات الأقواس وإعادة البناء بالمفاتيح المكرّرة
الإدخال:
?tags[]=new&tags[]=sale&filter[price][max]=50&q=caf%C3%A9+latteالنتيجة:
JSON: {"tags":["new","sale"],"filter":{"price":{"max":50}},"q":"café latte"}
Rebuilt (repeat style): tags=new&tags=sale&filter%5Bprice%5D%5Bmax%5D=50&q=caf%C3%A9%20latteالأسئلة الشائعة حول محلّل سلاسل الاستعلام
كيف تُعالج المفاتيح المكرّرة؟
يتحوّل ids=1&ids=2 إلى مصفوفة [1,2] في عرض JSON (أو ["1","2"] عند إيقاف خيار «اكتشاف الأرقام/القيم المنطقية في JSON»)، ويبقى كلا الإدخالين ظاهرين في الجدول مع موضعيهما. ويستخدم الاستعلام المعاد بناؤه نمط المصفوفات الذي تختاره (التكرار أو الأقواس أو الفهارس أو الفاصلة).
إلامَ يتحوّل filter[price][max]=50؟
إلى كائنات متداخلة: {"filter":{"price":{"max":50}}}. وتظهر القيمة عدداً (50) لأن خيار «اكتشاف الأرقام/القيم المنطقية في JSON» مفعّل افتراضياً؛ أوقفه لتبقى كل القيم نصوصاً ("50"). وتتحوّل المفاتيح المنتهية بـ [] إلى مصفوفات، تماماً كما تفسّرها PHP وRails ومكتبة qs.
ما الفرق بين %20 و+ للمسافات؟
يرمّز RFC 3986 المسافة بالنسبة المئوية على شكل %20. أما ترميز نماذج HTML (application/x-www-form-urlencoded) فيستخدم +. يُفكّ ترميز كليهما إلى مسافة عند التحليل؛ واختر عند إعادة البناء الترميز الذي تتوقعه واجهة API لديك.
هل يمكنني لصق عنوان URL كامل؟
نعم. عندما يبدو الإدخال عنوان URL، يُحلَّل الجزء الذي يلي ? فقط ويُتجاهل الجزء (#…).
ملاحظات تقنية
يستخدم فك الترميز دالة decodeURIComponent بعد تحويل + إلى مسافات، مع الرجوع إلى النص الخام عند مصادفة تسلسلات غير صالحة بدلاً من إطلاق خطأ. وتُحلَّل مسارات الأقواس بقواعد نحوية بسيطة (اسم متبوع بـ [segment]*) مطابقة لـ PHP ومكتبة qs؛ وتتحوّل المقاطع الرقمية إلى فهارس مصفوفات.
المراجع
- RFC 3986: Uniform Resource Identifier (URI): Generic Syntaxأجزاء URI (النظام والسلطة والمسار والاستعلام والجزء) والمحارف المحجوزة والترميز بالنسبة المئوية.
- URL Standardكيف تحلّل المتصفحات عناوين URL فعلياً وتسلسلها وترمّزها، بما فيها application/x-www-form-urlencoded.