ترميز URL: دليل شامل
ترميز URL (المعروف أيضاً باسم ترميز النسبة المئوية) هو آلية حاسمة لضمان نقل عناوين URL البيانات بشكل موثوق عبر الإنترنت. الأحرف الخاصة وعلامات الترقيم وحتى المسافات يمكن أن تكسر عناوين URL إذا لم يتم ترميزها بشكل صحيح. يشرح هذا الدليل الشامل كيف يعمل ترميز URL، ولماذا هو ضروري، وكيفية استخدامه بشكل صحيح.
ما هو ترميز URL؟
ترميز URL هو عملية تحويل الأحرف إلى تنسيق يمكن نقله بأمان عبر الإنترنت. تم تصميم عناوين URL في الأصل للأحرف ASCII فقط - وتحديداً مجموعة فرعية من الأحرف "الآمنة". الأحرف التي لا تندرج في هذه المجموعة الآمنة يجب ترميزها. عملية الترميز بسيطة: يتم استبدال كل حرف غير آمن بعلامة النسبة المئوية (%) متبوعة برمزها السداسي العشري. على سبيل المثال، المسافة تصبح %20 (أو + في سياقات معينة)، والعلامة @ تصبح %40، وعلامة # تصبح %23. تعتبر الأحرف التالية "آمنة" ولا تحتاج إلى ترميز: الأحرف A-Z، a-z، الأرقام 0-9، الواصلة (-)، الشرطة السفلية (_)، النقطة (.)، والتيلدا (~). كل شيء آخر، بما في ذلك المسافات وعلامات الترقيم ومعظم الأحرف الخاصة، يجب ترميزه. الترميز ضروري للأحرف "المحجوزة" التي لها معان خاصة في عناوين URL. على سبيل المثال، & تفصل معاملات سلسلة الاستعلام، = تفصل المفاتيح عن القيم، وعلامة # تحدد أجزاء. إذا كنت تريد استخدام هذه الأحرف كبيانات فعلية (وليس كمحددات)، يجب ترميزها. تصبح الأحرف غير ASCII (مثل العربية أو الصينية أو الرموز التعبيرية) أكثر تعقيداً. يجب أولاً تحويلها إلى UTF-8، ثم يتم ترميز كل بايت كنسبة مئوية. على سبيل المثال، الحرف العربي "ع" (U+0639) يصبح %D8%B9 في UTF-8 المرمز بالنسبة المئوية.
متى تحتاج إلى ترميز URL
فهم متى تحتاج إلى ترميز URL أمر بالغ الأهمية لتجنب الأخطاء الشائعة. مكونات URL المختلفة لها قواعد ترميز مختلفة. معاملات سلسلة الاستعلام هي حالة الاستخدام الأكثر شيوعاً. عند إضافة بيانات إلى عنوان URL بعد علامة ؟، يجب ترميز كل من المفاتيح والقيم. على سبيل المثال، search=hello world يجب أن يصبح search=hello%20world. إذا فشلت في الترميز، قد تفسر المسافة كنهاية المعامل، مما يكسر عنوان URL الخاص بك. تحتاج مسارات URL أحياناً إلى ترميز، خاصة عند التعامل مع أسماء ملفات تحتوي على أحرف خاصة. الملف "my document.pdf" في المسار يجب أن يصبح my%20document.pdf. ومع ذلك، لاحظ أن محددات المسار (/) يجب ألا يتم ترميزها ما لم تكن جزءاً من اسم الملف الفعلي. أجزاء URL (الجزء بعد #) لها قواعد ترميز مماثلة. إذا كان جزءك يحتوي على أحرف خاصة، يجب ترميزه لضمان العمل بشكل صحيح عبر المتصفحات والخوادم. الأحرف الدولية (Unicode) تحتاج دائماً إلى ترميز في عناوين URL. بينما تدعم المتصفحات الحديثة عرض أسماء النطاقات الدولية (IDN)، يتم ترميزها فعلياً باستخدام Punycode. بالنسبة لبقية URL، يجب ترميز أحرف Unicode بالنسبة المئوية. عند بناء عناوين URL برمجياً، قم دائماً بترميز بيانات المستخدم. لا تثق أبداً في أن المدخلات ستحتوي فقط على أحرف آمنة. إدخال واحد غير متوقع يمكن أن يكسر عناوين URL الخاصة بك أو، أسوأ من ذلك، يخلق ثغرات أمنية.
الأخطاء الشائعة في ترميز URL
يرتكب المطورون العديد من الأخطاء الشائعة مع ترميز URL. تجنب هذه المزالق لضمان عمل عناوين URL الخاصة بك بشكل موثوق. الخطأ رقم واحد هو الترميز المزدوج. هذا يحدث عندما تقوم بترميز سلسلة، ثم ترميز النتيجة مرة أخرى. "hello world" يصبح "hello%20world" بعد الترميز الأول، ولكن إذا قمت بترميزه مرة أخرى، تصبح علامة % نفسها مرمزة: "hello%2520world". عند فك الترميز، تحصل على "hello%20world" بدلاً من "hello world". قم دائماً بتتبع ما إذا كانت البيانات قد تم ترميزها بالفعل. عدم ترميز الأحرف المحجوزة عند استخدامها كبيانات مشكلة شائعة. إذا كان لديك معامل مثل url=https://example.com، يجب أن يكون url=https%3A%2F%2Fexample.com. بدون الترميز، يفسر & و = في القيمة على أنها محددات معاملات، وليس جزءاً من البيانات. الترميز غير الكافي لأحرف Unicode يسبب مشاكل. تذكر أنه يجب تحويل أحرف Unicode إلى UTF-8 أولاً، ثم ترميز كل بايت بالنسبة المئوية. استخدم وظائف الترميز المضمنة في لغتك (encodeURIComponent في JavaScript، urllib.parse.quote في Python) بدلاً من محاولة القيام بذلك يدوياً. خلط + و %20 للمسافات يمكن أن يسبب مشاكل. كلاهما يمثل المسافات، لكن + خاص بسلاسل استعلام application/x-www-form-urlencoded، بينما %20 هو الترميز الصحيح لمكونات URL الأخرى. استخدم encodeURIComponent (الذي ينتج %20) للأمان العام. عدم ترميز عناوين URL المعاد توجيهها يخلق ثغرات أمنية. إذا كنت تأخذ عنوان URL كمعامل (مثل redirect=...) وتستخدمه دون التحقق والترميز، يمكن للمهاجمين التلاعب به للتصيد الاحتيالي أو الهجمات الأخرى. استخدام وظيفة الترميز الخاطئة في JavaScript شائع بشكل مؤلم. escape() مهمل - لا تستخدمه. encodeURI() يترك العديد من الأحرف دون ترميز - استخدمه فقط لعناوين URL الكاملة حيث لا تريد ترميز :// وأحرف بنية URL الأخرى. encodeURIComponent() هو ما تريده لترميز قيم المعاملات الفردية.
جرب الأداة
مشفر/فاك تشفير URL
اعرف المزيد
الأسئلة الشائعة
مشفر/فاك تشفير URL
الأسئلة الشائعة →