سؤال

لدي سلسلة من رأس HTTP، ولكن تم هربها .. ما هي وظيفة يمكنني استخدامها لتشغيله؟

myemail%40gmail.com -> myemail@gmail.com

سوف urllib.unquote () يكون الطريق للذهاب؟

هل كانت مفيدة؟

المحلول

أنا متأكد من أن أوريليب unquote هي الطريقة الشائعة للقيام بذلك.

>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'myemail@gmail.com'

هناك ايضا unquote_plus:

مثل Unquote ()، ولكن يستبدل أيضا علامات Plus بواسطة المسافات، كما هو مطلوب لقيم نموذج HTML غير المستمر.

نصائح أخرى

نعم، يبدو ذلك urllib.unquote() ينجز هذه المهمة. (أنا اختبارها ضد مثالك على Codepad.)

في بيثون 3، هذه الوظائف هي urllib.parse.unquote و urllib.parse.unquote_plus.

يستخدم الأخير في سبيل المثال للحصول على سلاسل الاستعلام في عناوين URL HTTP، حيث الأحرف المسافة () ترميز تقليديا مثل شخصية زائد (+)، و ال + هو في المئة المشفر ل %2B.

بالإضافة إلى هذه هناك unquote_to_bytes الذي يحول السلسلة المشفرة المعينة إلى bytes, ، والتي يمكن استخدامها عند الترميز غير معروف أو البيانات المشفرة هي البيانات الثنائية. ومع ذلك لا يوجد unquote_plus_to_bytes, ، إذا كنت في حاجة إليها، يمكنك القيام به:

def unquote_plus_to_bytes(s):
    if isinstance(s, bytes):
        s = s.replace(b'+', b' ')
    else:
        s = s.replace('+', ' ')
    return unquote_to_bytes(s)

مزيد من المعلومات حول ما إذا كان للاستخدام unquote أو unquote_plus متاح في URL ترميز حرف الفضاء: + أو٪ 20.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top