Dengan mengatur Content-Type ke application/octet-stream, konten yang dihasilkan secara dinamis dapat diunduh sebagai file. Kemudian gunakan Content-Disposition untuk mengatur nama file yang diunduh. Pada dasarnya, program pengunduhan ditulis seperti ini:
<?php$filename = “document.txt”;header('Content-Type: application/octet-stream');header('Content-Disposition: attachment; filename=' . $filename);print “Halo!”;?>Setelah membukanya dengan browser, Anda dapat mengunduh document.txt.
Namun, jika $filename dikodekan UTF-8, beberapa browser tidak dapat menanganinya dengan benar. Misalnya, ubah sedikit program di atas:
<?php$filename = "Chinese file name.txt";header('Content-Type: application/octet-stream');header('Content-Disposition: attachment; filename=' . $filename);print “Hello!”;?> Jika Anda menyimpan program dalam pengkodean UTF-8 dan kemudian mengaksesnya, nama file yang diunduh oleh IE6 akan kacau. Nama file yang diunduh di bawah FF3 hanya memiliki kata "Cina". Semuanya berfungsi dengan baik di Opera 9.
Header keluaran sebenarnya terlihat seperti ini:
Content-Disposition: attachment; filename=Chinese file name.txt Faktanya, menurut definisi RFC2231, pengkodean multi-bahasa Content-Disposition harus didefinisikan seperti ini:
Content-Disposition: attachment ; nama file*=”utf8 "%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt" artinya:
tambahkan * sebelum tanda sama dengan setelah nama file
Nilai nama file dibagi menjadi tiga segmen dengan tanda kutip tunggal, yaitu kumpulan karakter (utf8), bahasa (kosong), dan nama file yang dikodekan urlen.
Yang terbaik adalah menambahkan tanda kutip ganda, jika tidak, bagian setelah spasi pada nama file tidak akan ditampilkan di Firefox. Perhatikan bahwa hasil urlencode tidak sama dengan hasil fungsi urlencode php +, dan di sini perlu diganti dengan %20
Setelah pengujian, ditemukan bahwa dukungan dari beberapa browser mainstream adalah sebagai berikut:
lampiran IE6; filename="<UTF-8 nama file setelah pengkodean URL>"
lampiran FF3; nama file = "nama file UTF-8"
lampiran; nama file*=”utf8”<nama file UTF-8 setelah pengkodean URL>”
lampiran O9; nama file = "nama file UTF-8"
Safari3(Win) sepertinya tidak didukung? Tidak ada metode di atas yang berfungsi
. Tampaknya program harus ditulis seperti ini untuk mendukung semua browser utama:
<?php$ua = $_SERVER["HTTP_USER_AGENT"];$filename = "Chinese file name.txt";$encoded_filename = urlencode( $nama file);$nama_file yang dikodekan = str_replace("+", "%20", $nama_file yang dikodekan);header('Jenis Konten: aplikasi/aliran oktet');if (preg_match("/MSIE/", $ua) ) { header('Disposisi Konten: lampiran; nama file="' . $encoded_filename . '"');} else if (preg_match("/Firefox/", $ua)) { header('Disposisi Konten : lampiran; nama file*=”utf8'” . $nama file . '"');} else { header('Disposisi Konten: lampiran; nama file=”' .$nama file . '"');}print 'ABC ';?>