قم بترميز وفك ترميز عناوين URL وسلاسل الاستعلام باستخدام ترميز النسبة المئوية. اختر وضع المكوّن أو URI الكامل أو بيانات النموذج، ويتم التحويل في الاتجاهين أثناء الكتابة.
قم بترميز النص بالنسبة المئوية لعناوين URL، أو فك ترميزه مرة أخرى. اكتب في أي من المربعين وسيتم تحديث الآخر فورًا. اختر الوضع الذي يناسب المكان الذي ستُستخدم فيه القيمة: معلمة استعلام واحدة، أو عنوان URL كامل، أو إرسال نموذج HTML.
ترميز النسبة المئوية، شرح دقيق
لماذا تحتاج عناوين URL إلى الترميز أصلًا
عنوان URL ليس نصًا حرًا. الأحرف مثل ? و# و& و/ و=محجوزة: فهي تحمل معنى بنيويًا، إذ تحدد مكان انتهاء المسار وبدء الاستعلام، أو تفصل بين معلمة وأخرى. إذا كانت القيمة التي تريد إرسالها تحتوي بالصدفة على أحد هذه الأحرف، فسيقرأ المحلل في الطرف الآخر عنوان URL الخاص بك بشكل خاطئ. يحل ترميز النسبة المئوية هذه المشكلة باستبدال البايت المخالف بـ% متبوعًا بقيمته السداسية العشرية المكونة من رقمين، لذا ينتقل & داخل القيمة كـ%26 ولا يمكن الخلط بينه وبين فاصل أبدًا.
غير المحجوز والمحجوز وكل شيء آخر
يقسم RFC 3986 فضاء الأحرف إلى ثلاث مجموعات.
غير المحجوز — A-Z a-z 0-9 - . _ ~. هذه لا تحتاج إلى ترميز أبدًا ويجب تركها كما هي. ترميزها على أي حال قانوني لكنه ينتج عناوين URL أكثر قبحًا وقد يكسر مقارنات السلاسل البسيطة.
المحجوز — : / ? # [ ] @ ! $ & ' ( ) * + , ; =. هذه آمنة فقط حيث يُقصد منها أن تكون بنيوية. داخل القيمة يجب ترميزها.
كل شيء آخر — المسافات وأحرف التحكم وأي نص غير ASCII. هذه تتطلب ترميزًا دائمًا.
النص غير ASCII و UTF-8
يعمل ترميز النسبة المئوية على البايتات لا الأحرف، لذا يجب تحويل النص إلى بايتات أولًا. الإجابة الحديثة هي دائمًا UTF-8. علامة € تساوي ثلاثة بايتات في UTF-8 (E2 82 AC)، لذا تُرمَّز إلى %E2%82%AC. استخدمت الأنظمة القديمة أحيانًا ترميز الصفحة الخاص بها، ولهذا لا تزال تصادف أحيانًا عنوان URL مشوهًا مشفرًا بـ Latin-1 أو GBK. يستخدم هذا الموقع UTF-8 في كل مكان، بما يطابق ما تتوقعه المتصفحات وكل إطار عمل حالي على الخادم.
الأوضاع الثلاثة، ومتى يكون كل منها خاطئًا
encodeURIComponent هو الافتراضي الآمن ويهرب جميع الأحرف المحجوزة. استخدمه كلما كنت تُدخل قيمة داخل عنوان URL. يحافظ encodeURI عمدًا على الأحرف المحجوزة ليبقى عنوان URL الكامل سليمًا — استخدمه فقط لترتيب عنوان URL مُجمَّع بالفعل، ولا تستخدمه أبدًا على معلمة منفردة، لأنه سيترك & داخل القيمة ويُفسد سلسلة الاستعلام.
وضع النموذج هو الحالة الخاصة. تسلسل application/x-www-form-urlencoded، الذي سبق مواصفات URL الحديثة، يرمّز المسافة كـ+ بدلاً من %20. كلاهما صحيح في سلسلة الاستعلام، وتقبله الخوادم، لكن إذا كنت تُنشئ جسم طلب POST يدويًا فعليك اتباع اصطلاح النموذج.
غموض +
لأن ترميز النموذج يعطي + معنى خاصًا، يجب ترميز علامة الجمع الحرفية في قيمة النموذج نفسها كـ%2B. هذا هو أكثر أخطاء الترميز شيوعًا في الواقع: تُمرَّر سلسلة base64 أو رقم هاتف بصيغة دولية كما هي، فيحوّل الطرف المستلم كل + إلى مسافة. إذا كانت بياناتك قد تحتوي على علامات جمع، فإما أن ترمّزها صراحة أو تتجنب وضع النموذج.
الترميز المزدوج
ترميز سلسلة مشفّرة بالفعل يحوّل كل % إلى %25، لذا تصبح %20 هي %2520. هذا عادةً خطأ — يحدث عندما تُرمَّز القيمة بواسطة كود التطبيق ثم مرة أخرى بواسطة إطار عمل أو وكيل. إذا رأيت %25 في عنوان URL حيث لم تقصد علامة نسبة مئوية حرفية، فأنت تنظر إلى قيمة مشفّرة مزدوجًا. فك الترميز مرتين يستعيد النص الأصلي، لكن الإصلاح الحقيقي هو إزالة إحدى خطوات الترميز.
الأسئلة الشائعة
هل أستخدم %20 أم + للمسافة؟
كلاهما مقبول في سلسلة الاستعلام. استخدم %20 إذا أردت تمثيلًا واحدًا صالحًا في كل مكان، بما في ذلك داخل جزء المسار حيث تعني + علامة جمع حرفية. استخدم + فقط عند إنتاج بيانات application/x-www-form-urlencoded.
لماذا تتحول علامة الجمع إلى مسافة؟
شيء ما في السلسلة يحلل القيمة كبيانات نموذج، حيث + هي ترميز المسافة. قم بترميز علامات الجمع الحرفية كـ%2B قبل إرسالها.
هل أحتاج إلى ترميز الشرطة المائلة؟
فقط عندما تكون الشرطة المائلة جزءًا من القيمة وليست فاصل مسار. يجب إرسال اسم ملف يحتوي على شرطة مائلة كـ%2F، وإلا سيقرؤه الخادم كمستوى دليل إضافي. لاحظ أن بعض الخوادم ترفض %2F في المسارات افتراضيًا كإجراء احترازي ضد اجتياز المسار.
هل الترميز حساس لحالة الأحرف؟
يمكن أن تكون الأرقام السداسية العشرية كبيرة أو صغيرة وكلاهما يُفك بنفس الطريقة، لكن RFC 3986 ينص على تفضيل الأحرف الكبيرة. %2F و%2f هما نفس الحرف؛ %2F هو الشكل الرسمي.
لماذا يفشل فك الترميز في سلسلتي؟
يجب أن تلي علامة النسبة المئوية رقمان سداسيان عشريان بالضبط. % معزولة أو شيء مثل %zz مشوّه والمفكك يرفضه. إذا كان نصك يحتوي شرعيًا على علامة نسبة مئوية، فكان يجب ترميزها كـ%25.
هل يرسل هذا بياناتي إلى أي مكان؟
لا. يعمل الترميز وفك الترميز في متصفحك باستخدام دوال URI المدمجة. لا يتم رفع أي شيء.