من خلال ضبط نوع المحتوى على application/octet-stream، يمكن تنزيل المحتوى الذي تم إنشاؤه ديناميكيًا كملف، وأعتقد أن الجميع يعرف ذلك. ثم استخدم ترتيب المحتوى لتعيين اسم الملف الذي تم تنزيله، ويعرفه الكثير من الأشخاص. بشكل أساسي، يتم كتابة برنامج التنزيل على النحو التالي:
<?php$filename = “document.txt”;header('Content-Type: application/octet-stream');header('Content-Disposition: Attachment; filename=' . $filename);print "Hello!";?>بعد فتحه باستخدام المتصفح، يمكنك تنزيل document.txt.
ومع ذلك، إذا كان $filename مشفرًا بـ UTF-8، فلن تتمكن بعض المتصفحات من التعامل معه بشكل صحيح. على سبيل المثال، قم بتغيير البرنامج أعلاه قليلاً:
<?php$filename = "Chinese file name.txt";header('Content-Type: application/octet-stream');header('Content-Disposition: Attachment; filename=' .$filename);اطبع "Hello!";?> إذا قمت بحفظ البرنامج بتشفير UTF-8 ثم قمت بالوصول إليه، فسيكون اسم الملف الذي تم تنزيله بواسطة IE6 مشوهًا. اسم الملف الذي تم تنزيله ضمن FF3 يحتوي فقط على الكلمة "الصينية". كل شيء يعمل بشكل جيد تحت Opera 9.
يبدو رأس الإخراج في الواقع كما يلي:
ترتيب المحتوى: مرفق؛ اسم الملف = اسم الملف الصيني.txt في الواقع، وفقًا لتعريف RFC2231، يجب تعريف ترتيب المحتوى للترميز متعدد اللغات على النحو التالي:
ترتيب المحتوى: المرفق ; filename*=”utf8 "%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt" يعني:
إضافة * قبل علامة المساواة بعد اسم الملف
تنقسم قيمة اسم الملف إلى ثلاثة أجزاء ذات علامات اقتباس مفردة، وهي مجموعة الأحرف (utf8)، واللغة (فارغة)، واسم الملف المشفر urlencoded.
من الأفضل إضافة علامات اقتباس مزدوجة، وإلا فلن يتم عرض الجزء الذي يلي المسافة في اسم الملف في Firefox. لاحظ أن نتيجة urlencode ليست هي نفس نتيجة وظيفة urlencode الخاصة بـ PHP والتي ستستبدل المسافة بـ +، وهنا يجب استبداله بـ %20
بعد الاختبار، وجد أن دعم العديد من المتصفحات الرئيسية هو كما يلي:
IE6 filename = "<UTF-8 file name after URL encoding>"
اسم الملف المرفق FF3 = "اسم الملف UTF-8"
اسم الملف المرفق*=”utf8”<اسم الملف UTF-8 بعد ترميز URL>”
اسم الملف المرفق O9 = "اسم الملف UTF-8"
يبدو أن Safari3(Win) غير مدعوم؟ لا تعمل أي من الطرق المذكورة أعلاه
. يبدو أنه يجب كتابة البرنامج بهذه الطريقة لدعم كافة المتصفحات الرئيسية:
<?php$ua = $_SERVER["HTTP_USER_AGENT"];$filename = "Chinese file name.txt";$encoded_filename. = urlencode( $filename);$encoded_filename = str_replace("+", "%20", $encoded_filename);header('نوع المحتوى: التطبيق/octet-stream');if (preg_match("/MSIE/", $ua) ) { header('Content-Disposition: Attachment; filename="' . $encoded_filename . '"');} else if (preg_match("/Firefox/", $ua)) { header('Content-Disposition : Attachment; '؛؟ >