تقنية

translate_path في بايثون: هل ? و%3F يعطيان المسار نفسه؟

الاستعلام يساوي المسار الأساسي والترميز يختلف
مقارنة نصية. [1] [2]

نفحص تحويل مسارين مؤلفين. [1] [2]

الخلاصة السريعة

لا؛ يختلف المساران في هذا الفحص. [1] [2]

  • نجهز كائنًا عبر __new__ دون تشغيل المُهيئ. [1] [2]
  • /x.txt?v=2 يساوي مسار /x.txt. [1] [2]
  • /x.txt%3Fv=2 يعطي نصًا مختلفًا. [1] [2]
  • يحذف الاستعلام قبل فك %3F إلى ?. [1] [2]
  • المخرجان True ثم False؛ ليست نتيجة فتح ملف. [1] [2]
  • نطاقنا 3.12.14 دون خادم أو ضمان صلاحية اسم أو أمان خادم. [1] [2]

المثال

from http.server import (
 SimpleHTTPRequestHandler as H)
h=H.__new__(H);h.directory='OWN'
a=h.translate_path('/x.txt?v=2')
b=h.translate_path('/x.txt')
print(a==b)
print(h.translate_path('/x.txt%3Fv=2')==b)

[1] [2]

الاستعلام والحرف

الاستعلام الحرفي يحذف هنا؛ أما %3F فيتحول لاحقًا إلى ? داخل النص الناتج. [1] [2]

الحذف يسبق فك علامة الاستفهام
نص دون فتح ملف. [1] [2]

translate_path يعيد مسارًا نصيًا. لم نفتح ملفًا أو نتحقق من وجوده. [1] [2]

حدود الفحص

هذا فحص طريقة التنفيذ على كائن مجهز يدويًا. لا يثبت خدمة ملف أو صلاحية الاسم في ويندوز أو أمان خادم. [1] [2]

المراجع

  1. Python: http.server
  2. CPython 3.12.14: server.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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