سؤال

لدي موضوع البريد الإلكتروني للنموذج:

=?utf-8?B?T3.....?=

نص البريد الإلكتروني مشفر بـ utf-8 base64 - وتم فك تشفيره بشكل جيد.أنا حاليًا أستخدم وحدة Perl's Email::MIME لفك تشفير البريد الإلكتروني.

ما معنى محدد =?utf-8 وكيف يمكنني استخراج المعلومات من هذه السلسلة؟

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

المحلول

ال encoded-word الرموز (حسب آر إف سي 2047) يمكن أن يحدث في قيم بعض الرؤوس.ويتم تحليلها على النحو التالي:

=?<charset>?<encoding>?<data>?=

مجموعة الأحرف هي UTF-8 في هذه الحالة، الترميز هو B مما يعني base64 (الخيار الآخر هو Q وهو ما يعني مقتبس للطباعة).

لقراءتها، قم أولاً بفك تشفير base64، ثم تعامل معها كأحرف UTF-8.

اقرأ أيضًا طلبات RFC المتنوعة لبريد الإنترنت للحصول على مزيد من التفاصيل، بشكل أساسي آر إف سي 2047.

وبما أنك تستخدم لغة بيرل، ترميز::MIME::Header يمكن أن تكون ذات فائدة:

ملخص

use Encode qw/encode decode/;
$utf8   = decode('MIME-Header', $header);
$header = encode('MIME-Header', $utf8);

خلاصة

هذه الوحدة تنفذ ترميز رأس MIME RFC 2047.هناك 3 أسماء ترميز متغير.Mime-Header ، MIME-B و MIME-Q.الفرق الموصوف أدناه

              decode()          encode()  
MIME-Header   Both B and Q      =?UTF-8?B?....?=  
MIME-B        B only; Q croaks  =?UTF-8?B?....?=  
MIME-Q        Q only; B croaks  =?UTF-8?Q?....?=

نصائح أخرى

أعتقد أن وحدة التشفير تتعامل مع ذلك باستخدام ملف MIME-Header الترميز، لذا جرب هذا:

use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);

الدفع RFC2047.يعني الحرف "B" أن الجزء الموجود بين الحرفين الأخيرين "؟" مشفر بالأساس 64.يعني "utf-8" بطبيعة الحال أنه يجب تفسير البيانات التي تم فك تشفيرها على أنها UTF-8.

التمثيل الصامت::كلمات من أدوات MIME تعمل بشكل جيد أيضًا لهذا الغرض.لقد واجهت بعض المشكلات مع Encode ووجدت أن MIME::Words نجح في بعض السلاسل التي لم ينجح فيها Encode.

use MIME::Words qw(:all);
$decoded = decode_mimewords(
    'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);

يعد هذا امتدادًا قياسيًا لتصنيف مجموعة الأحرف للرؤوس، المحددة في RFC2047.

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