ترميز عناوين URL

لا يمكن أن تكون بعض الأحرف جزءًا من عنوان URL (على سبيل المثال، المسافة) وبعض الأحرف الأخرى تحمل معنى خاصًا في عنوان URL. في نماذج HTML، يتم استخدام الحرف = لفصل اسم من قيمة. تستخدم البنية العامة لمعرّف الموارد المنتظم (URI) ترميز عنوان URL للتعامل مع هذه المشكلة، بينما تُجري نماذج HTML بعض البدائل الإضافية بدلاً من تطبيق تشفير النسبة المئوية لجميع هذه الأحرف.

على سبيل المثال، المسافات في سلسلة إما يتم ترميزها باستخدام %20 أو يتم استبدالها بعلامة الجمع (+). وإذا كنت تستخدم رمز الشرطة الرأسية (|) كفاصل، احرص على ترميز الأنبوب كـ %7C. يجب ترميز فاصلة في سلسلة باعتبارها %2C.

وننصحك باستخدام مكتبات إنشاء عناوين URL العادية على منصّتك لتشفير عناوين URL تلقائيًا، وذلك لضمان استخدام عناوين URL بشكل مناسب على نظامك الأساسي.

إنشاء عنوان URL صالح

قد تظن أن عنوان URL "الصالح" بديهي، ولكن هذا ليس صحيحًا تمامًا. على سبيل المثال، قد يتضمن عنوان URL الذي يتم إدخاله ضمن شريط عناوين في أحد المتصفحات رموزًا خاصة (على سبيل المثال، "上海+中國")، ويحتاج المتصفح إلى ترجمة هذه الأحرف داخليًا إلى تشفير مختلف قبل النقل. وبالمثل، فإن أي رمز ينشئ أو يقبل إدخال UTF-8 قد يتعامل مع عناوين URL التي تتضمن أحرف UTF-8 على أنها "صالحة"، ولكن قد يحتاج أيضًا إلى ترجمة تلك الأحرف قبل إرسالها إلى خادم ويب. وهذه العملية تُسمّى ترميز عنوان URL أو percent-encoding.

الأحرف الخاصة

ونحتاج إلى ترجمة رموز خاصة لأنّ جميع عناوين URL تحتاج إلى التوافق مع البنية المحدّدة في مواصفات معرّف الموارد المنتظم (URI). هذا يعني أن عناوين URL يجب أن تحتوي على مجموعة فرعية خاصة فقط من أحرف ASCII: الرموز الأبجدية الرقمية المألوفة، وبعض الأحرف المحجوزة للاستخدام كأحرف تحكم داخل عناوين URL. يلخّص هذا الجدول الأحرف التالية:

ملخص أحرف عنوان URL الصالحة
تحديدالشخصياتاستخدام عنوان URL
أحرف أبجدية رقمية متقدم سلاسل نصية واستخدام المخطط (http) والمنفذ (8080) وما إلى ذلك
غير محجوز - _ . ~ سلاسل نصية
تم الحجز ! * ' ( ) ; : @ & = + $ , / ? % # [ ] التحكم في الأحرف و/أو سلاسل النص

عند إنشاء عنوان URL صالح، عليك التأكّد من أنه يحتوي على تلك الأحرف فقط المعروضة في جدول ملخّص "حروف صالحة لعنوان URL". إنّ مطابقة عنوان URL لاستخدام هذه المجموعة من الأحرف يؤدي عادةً إلى مشكلتَين، إحداهما هي إغفال والأخرى:

  • الأحرف التي ترغب في التعامل معها موجودة خارج المجموعة السابقة. على سبيل المثال، يجب ترميز الأحرف المكتوبة باللغات الأجنبية مثل 上海+中國 باستخدام الأحرف أعلاه. وفقًا للاصطلاح الشائع، غالبًا ما يتم التعبير عن المسافات (غير المسموح بها ضمن عناوين URL) باستخدام حرف '+' زائد.
  • الأحرف موجودة ضمن المجموعة السابقة كأحرف محجوزة، ولكن يجب استخدامها حرفيًا. على سبيل المثال، يتم استخدام ? ضمن عناوين URL للإشارة إلى بداية سلسلة طلب البحث، وإذا كنت ترغب في استخدام السلسلة "? and The Mysterys"، فستحتاج إلى ترميز الحرف '?'.

يتم تشفير جميع الأحرف التي يتم تشفيرها باستخدام عنوان URL باستخدام حرف '%' وقيمة سداسية عشرية من حرفين متوافقة مع حرف UTF-8. على سبيل المثال، يتم ترميز 上海+中國 في UTF-8 بعنوان URL كـ %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B. سيتم ترميز السلسلة ? and the Mysterians بعنوان URL مثل %3F+and+the+Mysterians أو %3F%20and%20the%20Mysterians.

الأحرف الشائعة التي تحتاج إلى ترميز

في ما يلي بعض الأحرف الشائعة التي يجب ترميزها:

حرف غير آمن قيمة مرمّزة
مفتاح المسافة %20
" %22
< %3C
> %3E
# %23
% %25
| %7C

قد يكون تحويل عنوان URL الذي تتلقاه من إدخال المستخدم صعبًا في بعض الأحيان. على سبيل المثال، قد يُدخل مستخدم عنوانًا مثل "شارع محمد الخامس". وبوجهٍ عام، يجب إنشاء عنوان URL من أجزائه، مع التعامل مع أي إدخالات للمستخدمين على أنها أحرف حرفية.

بالإضافة إلى ذلك، تقتصر عناوين URL على 8192 حرفًا في جميع خدمات الويب على "منصة خرائط Google" وواجهات برمجة تطبيقات الويب الثابتة. بالنسبة إلى معظم الخدمات، نادرًا ما يتم الاقتراب من عدد الأحرف المسموح به. ومع ذلك، لاحظ أن بعض الخدمات لها العديد من المعلمات التي قد تؤدي إلى عناوين URL طويلة.